当存在多个虚拟主机标签时,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的主要内容,如果未能解决你的问题,请参考以下文章