我有一台运行Apache的Linux主机和一台运行IIS的Windows主机。我有一个指向Linux主机的域,需要将其中继(代理)请求发送到IIS;因此,我在Apache中有以下虚拟主机定义(工作正常):
<VirtualHost 192.168.0.2:80>
ServerName www.acme.com
DocumentRoot /var/www/acme.com
RewriteEngine On
RewriteOptions Inherit
RewriteRule ^/(.*) http://win.acme.com/$1 [P]
</VirtualHost>
现在我想添加SSL支持;定义变为:
<VirtualHost 192.168.0.2:443>
ServerName www.acme.com
DocumentRoot /var/www/acme.com
GnuTLSEnable On
GnuTLSPriorities NORMAL:%COMPAT
GnuTLSCertificateFile /var/www/ssl/www.acme.com.crt
GnuTLSKeyFile /var/www/ssl/www.acme.com.key
RewriteEngine On
RewriteOptions Inherit
RewriteRule ^/(.*) https://win.acme.com/$1 [P]
</VirtualHost>
我在两台网络服务器上都拥有有效且值得信赖的证书,如果我访问https://win.acme.com
一切都很好,但是,当我访问https://www.acme.com
时,我收到500内部服务器错误消息。查看错误日志显示:
[Wed Jul 20 08:35:34 2011] [错误] [客户端76.168.166.70] SSL代理 请求www.wileybits.com:80但未启用[提示: SSLProxyEngine] [Wed Jul 20 08:35:34 2011] [错误]代理:HTTPS: 未能为74.166.186.70:443(win.acme.com)启用ssl支持
请注意代理请求似乎是针对错误的域(wileybits)...它显示的域也由我的Apache服务器托管,但我不知道为什么它出现在acme.com的日志中(也许反向DNS查找?)
无论如何,我错过了什么?
提前感谢 - ekkis
P.S。主机名和地址已被修改以保护无辜者:)
*更新*
使用:
RewriteRule ^/(.*) https://win.acme.com/$1 [R,L]
它似乎工作正常,但当然,Windows的主机名变得可见,这在我的场景中是不可接受的
我也试过(而不是mod_rewrite):
ProxyRequests Off
ProxyPass / https://win.acme.com/
但同样的错误
答案 0 :(得分:80)
想通了......显然我可以这样做:
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
ProxyPass / https://win.acme.com/
ProxyPassReverse / https://win.acme.com/
CacheDisable *
它运作得很好!
[解决方案来自3cx.org上的mikeg's posting]
答案 1 :(得分:0)
不确定此错误的原因,但您可能希望尝试使用Squid或Varnish来完成此操作。以前,我使用Squid代理安全的Windows IIS实例而没有问题。