我正在尝试建立一个具有多个Web应用程序的服务器,这些服务器都将通过apache VirtualHost(在同一服务器上运行的apache)提供服务。我的主要约束是每个Web应用程序必须使用SSL加密。经过一段时间的搜索并查看关于stackoverflow的其他问题之后,我为VirtualHost编写了以下配置:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
尽管https://host.example.org:8443是可访问的,https://host.example.org不是,这违背了我的虚拟主机配置的目的。Firefox抱怨说,即使成功连接到服务器,连接也被中断。我也在apache的error.log中得到以下警告:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
在Web应用程序(Tomcat服务器)上,访问日志显示了一个奇怪的访问请求:
"?O^A^C / HTTP/1.1" 302
以下是我直接连接到https://host.example.org:8443时获得的正确访问请求:
"GET / HTTP/1.1" 302
最后,我还要提到的一点是,当我不使用SSL时,虚拟主机可以正常工作。
我该如何进行这项工作?
ProxyPreserveHost On
它几乎总是错误的,无用的并且几乎总是会中断ProxyPassReverse
。附带说明ProxyRequests off
是默认值,因此是多余的。