Nul*_*uli 10 ssl https virtualhost apache-2.2
我遵循了本指南:http : //hints.macworld.com/article.php?story=20041129143420344
这是我的虚拟主机定义
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
CacheDisable *
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
DocumentRoot "/Users/me/projects/myproject/public"
ServerName ssl.mydomain.com
ServerAlias *.ssl.mydomain.com
SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
ErrorLog "/Users/me/Desktop/ssl.log"
ProxyPass / https://localhost:3002/
ProxyPassReverse / https://localhost:3002
ProxyPreserveHost on
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当我尝试连接到 Web 浏览器的 sevre viov 时,出现此错误:
[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()
Run Code Online (Sandbox Code Playgroud)
我该如何调试/解决这个问题?
小智 13
要补充 vbartoni 的答案,似乎从 Apache 2.4 及更高版本开始,有不同的默认值和新指令。
我正在运行 Apache 2.4.6,我必须添加以下指令才能使其正常工作:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
Run Code Online (Sandbox Code Playgroud)
不要为前端和后端服务器之间的 HTTPS 烦恼,为连接启用 SSL 没有什么意义localhost
。
为了澄清,使用ProxyPass / http://localhost:3002/
而不是ProxyPass / https://localhost:3002/
或者,如果您确实想使用 SSL 将反向代理连接到后端服务器(当该服务器不在 Apache Httpd 反向代理所在的位置时最有用),除了 之外,还可以使用指令https://backend-server-address
来SSLProxy*
设置CA 证书,如文档简介mod_proxy
中所述。特别是,您需要配置SSLProxyCACertificateFile
并确保后端服务器的证书颁发给Apache Httpd 所看到的正确主机名(即localhost
在您的情况下)。
如果您没有使用 SSL 连接到后端服务器,它可能无法检测到您实际上正在使用 SSL,并被配置为强制您使用 SSL(因此会出现无限重定向)。您可能想要查看与 Jetty 的forwarded
选项类似的机制(能够告诉后端它位于代理后面)。Rails 可能能够X-Forwarded-Proto
默认解释。在这种情况下,请将其添加到您的 Apache 配置(在 SSL 虚拟主机中):
RequestHeader set X-Forwarded-Proto 'https'
Run Code Online (Sandbox Code Playgroud)
例如,这里似乎讨论了类似的问题。