配置 apache 服务器以代理 SSL 连接时出现问题
Posted
技术标签:
【中文标题】配置 apache 服务器以代理 SSL 连接时出现问题【英文标题】:Trouble configuring apache server to proxy an SSL connection 【发布时间】:2013-08-09 01:32:14 【问题描述】:我正在使用 Apache Portable Runtime 在 Tomcat7 上运行应用程序,我购买了 SSL 证书并正确配置了它 - 当我尝试通过 ip:port 组合连接时,它连接正常,但警告我证书已颁发给域名,而不是 IP。
我使用的 VPS 没有 SELinux(安装时出现问题),这是 AFAIK 需要在 apache 中配置 SSL,所以我只想将请求路由到 Tomcat,它在它的结束。
我将 apache 配置为代理连接,首先使用完美运行的端口 80:
NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>
然后使用由于某种原因不想工作的 SSL 端口:
NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
SSLProxyEngine On
ProxyPreserveHost On
ProxyRequests Off
ServerName https://www.mysite.com
ServerAlias https://www.mysite.com
ProxyPass / https://localhost:8443/MYSITE/
ProxyPassReverse / https://localhost:8443/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
CacheDisable *
</VirtualHost>
编辑: 我添加了
RequestHeader set Front-End-Https "On"
VirtualHost www.mysite.com:443 的指令,根据:http://www.gossamer-threads.com/lists/apache/users/396577
这是在 Tomcat 的 server.xml 中配置的 Tomcat APR 连接器 -
<Connector port="8443" maxHttpHeaderSize="16500"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="x509-cert-path"
SSLCertificateKeyFile="key-file-path"
/>
启用虚拟主机和重新启动 apache 时没有错误/警告。当我尝试 https 时,这是我在 FFox 中看到的:
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long)
在 Chromium 中:
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
Apache 的 error.log 显示此警告消息:
[warn] [client 216.58.38.90] proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be www.mysite.com for uri /
我花了几天时间尝试配置它,如果有人解释发生了什么以及如何修复它,我将不胜感激。
非常感谢。 维克多。
【问题讨论】:
【参考方案1】:您不需要 Tomcat 中的 8443 HTTPS 连接器。 Apache HTTPD 应该终止 SSL 连接,并通过 ProxyPass / http://localhost:8080/MYSITE/.
向 Tomcat 发送纯文本您只需要一个带有 port=8080
和 address=127.0.0.1
的纯文本 HTTP 连接器,这样外人就无法得到它。
更好的是,Tomcat 中没有任何 HTTP 连接器,只有一个 AJP 连接器,address=127.0.0.1
仍然,并在 Apache 中使用 mod_proxy_ajp。
【讨论】:
以上是关于配置 apache 服务器以代理 SSL 连接时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJS 代理通行证的 Apache SSL 配置无法启动