43

我有一台运行 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>

我在两个 Web 服务器上都有有效且受信任的证书,如果我访问https://win.acme.com一切都很好,但是,当我访问时,https://www.acme.com我会收到 500 内部服务器错误消息。查看错误日志显示:

[2011 年 7 月 20 日星期三 08:35:34] [错误] [客户端 76.168.166.70] 为 www.wileybits.com:80 请求 SSL 代理但未启用 [提示:SSLProxyEngine] [2011 年 7 月 20 日星期三 08:35:34] [错误] 代理:HTTPS:无法为 74.166.186.70:443 (win.acme.com) 启用 ssl 支持

请注意代理请求似乎是针对错误的域(wileybits)...它显示的域也由我的 Apache 服务器托管,但我不明白为什么它会出现在 acme.com 的日志中(相反也许是 DNS 查询?)

无论如何,我错过了什么?

在此先感谢-ekkis

ps 主机名和地址已被更改以保护无辜者:)

* 更新 *

和:

RewriteRule ^/(.*) https://win.acme.com/$1 [R,L]

它似乎工作正常,但当然,Windows 的主机名变得可见,这在我的场景中是不可接受的

我也试过(而不是 mod_rewrite):

ProxyRequests Off
ProxyPass / https://win.acme.com/

但同样的错误

4

2 回答 2

84

想通了......显然我可以这样做:

SSLProxyEngine On
RequestHeader set Front-End-Https "On"
ProxyPass / https://win.acme.com/
ProxyPassReverse / https://win.acme.com/
CacheDisable *

它工作得很好!

[解决方案来自mikeg在 3cx.org 上的帖子]

于 2011-07-20T17:27:31.580 回答
0

不确定此错误的原因,但您可能希望尝试使用 Squid 或 Varnish 来完成此操作。以前,我使用 Squid 代理安全的 Windows IIS 实例没有问题。

于 2011-07-20T17:08:30.547 回答