当存在多个虚拟主机标签时,Apache 2.4.7 重定向不起作用 Ubuntu14.04

Posted

技术标签:

【中文标题】当存在多个虚拟主机标签时,Apache 2.4.7 重定向不起作用 Ubuntu14.04【英文标题】:Apache 2.4.7 redirect not working when multiple Virtual host tags are present Ubuntu14.04 【发布时间】:2016-04-13 06:53:29 【问题描述】:

我的 conf 文件中有 2 个虚拟主机标签。

第一个标签包含来自内部 IP 地址的请求的重定向规则。

第二个标签包含来自公共 IP 或任何其他地方的请求的其他重定向规则

当我删除第一个 VirtualHost 标记时,重定向和 ssl 工作得非常好,但我还需要第一个 VirtualHost 标记

我的配置文件

这位于 /etc/apache2/sites-available/site.conf

<VirtualHost 10.1.0.7:80>
    ProxyPreserveHost On
    LogLevel debug
    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
    ServerName servername.com
    ProxyPass /Service http://localhost:8080/Service
    ProxyPassReverse /Service http://localhost:8080/Service
</VirtualHost>
<VirtualHost *:80>
    ProxyPreserveHost On
    LogLevel debug
    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
    ServerName servername.com
    RewriteEngine On    # Turn on the rewriting engine
    RewriteCond %HTTPS !=on
    RewriteRule ^/?(.*) https://%SERVER_NAME/$1 [R,L] 
</VirtualHost>

如果我删除第一个包含私有 IP 的 VirtualHost 标记,一切正常,但只要我添加它,服务器就不会重定向到 443 端口。

我的 ssl 配置文件:

位于 /etc/apache2/sites-available/site-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html
    LogLevel debug
    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
     ProxyPreserveHost On
        ServerName server.com
    # Redirections:
    ProxyPass /server-status http://localhost:7570/server-status
    ProxyPassReverse /server-status http://localhost:7570/server-status

    ProxyPass /mCare/subscribe ws://localhost:8080/mCare/subscribe
    ProxyPassReverse /mCare/subscribe ws://localhost:8080/mCare/subscribe

    ProxyPass /mCare http://localhost:8080/mCare
    ProxyPassReverse /mCare http://localhost:8080/mCare

    ProxyPass /solr http://localhost:8280/solr
    ProxyPassReverse /solr http://localhost:8280/solr

    SSLEngine on
            SSLCertificateFile      /mnt/opt/ssl/2015/sha2/b89516b0cdc9a701.crt
            SSLCertificateKeyFile   /mnt/opt/ssl/2015/sha2/mcare.pem
            SSLCertificateChainFile /mnt/opt/ssl/2015/sha2/gd_bundle.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

这是我的 ports.conf 文件:

Listen 80

<IfModule ssl_module>
      Listen 443
</IfModule>

我也创建了所有需要的软链接。

【问题讨论】:

【参考方案1】:

我终于让它工作了。

我发布此内容是为了让面临相同问题的其他人可以得到帮助。

我只是用服务器的内部IP避免了虚拟主机标签,并设法在RewriteRule中编写了更好的正则表达式

<VirtualHost *:80>
    ProxyPreserveHost On

    ProxyPass /Service http://localhost:8080/Service
    ProxyPassReverse /Service http://localhost:8080/Service





    LogLevel debug
    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined


    ServerName server.com

    RewriteEngine On    # Turn on the rewriting engine
    RewriteCond %HTTPS !=on

    RewriteRule ^((?!/Service).)*$ https://%SERVER_NAME%REQUEST_URI [R,L]

</VirtualHost>

所以现在,我的 /etc/apache2/sites-available/site.conf 文件只包含一个虚拟标签。

我已经编写了表达式,以便包含 Service 的所有请求都不需要重定向到 https,并且我也为此提供了 proxyPass。

这解决了我的问题

如果有人有更好的解决方案,那么也欢迎您的回答

【讨论】:

以上是关于当存在多个虚拟主机标签时,Apache 2.4.7 重定向不起作用 Ubuntu14.04的主要内容,如果未能解决你的问题,请参考以下文章

ZendFramework 2 - 500 内部服务器错误

配置apache虚拟主机

apache2虚拟主机实现一个服务器绑定多个域名

为 Apache 虚拟主机设置多个域时出错

php - 在 Windows 7 上的 PHP7 Apache/2.4.7 上安装 phpmyadmin 时遇到问题

MAC为Apache2服务器配置多个虚拟主机