我在linux系统上有一个apache服务器(在amazon aws上),运行https。我也有一个tomcat。我想用apache作为tomcat的前门。我为apache启用了mod_proxy模块,并且重定向到tomcat工作正常,看起来像这样:
<VirtualHost *:80>
ServerName my.domain.com
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
我在/etc/httpd/conf.d文件夹中的httpd.conf文件底部添加了这行代码。
但是如果我在httpd.conf文件中添加另一个VirtualHost以重定向到https,则重定向到https会起作用,但会显示apache Test页面,而不是tomcat页面。如果我删除此重定向VirtualHost,将显示apache tomcat页面。我还启用了mod_rewrite模块。我在ssl.conf中配置的https内容(/etc/httpd/conf.d/ssl.conf),它运行正常。在那里我设置了ssl证书,如果客户端使用已知的https证书发出请求,服务器将回答该请求。否则没有。
我添加到httpd.conf的https重定向的VirtualHost如下所示:
<VirtualHost *:80>
ServerName my.domain.com
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
你能帮帮我吗?我在这做错了什么?我应该在/etc/httpd/conf.d/ssl.conf文件中进行更改吗?我非常
答案 0 :(得分:1)
好的,现在我得到了解决这个问题的方法。在VirtualHost结束之前,我在/etc/httpd/conf.d/ssl.conf的底部写了这行:
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
答案 1 :(得分:0)
以下栏目
Passive mode
就像是说“这个块会处理<{3}}的所有”。您不能添加具有相同端口/ ServerName的另一个:它们不会合并,一个将影响另一个。
如果https部分已经运行并且您想要将所有http流量重定向到https,则可以完全注释/删除第一个<VirtualHost *:80>
ServerName my.domain.com
# [...]
</VirtualHost>
块(使用代理)。 <VirtualHost *:80>
中的代理规则将处理所有内容(假设https部分有效)。
如果您只想将部分重定向到https(不是您的问题,但这应该有助于您理解),您应该添加<VirtualHost *:443>
/ RewriteEngine
/ ReWriteCond
指令在现有的虚拟主机内。