2011-07-20 92 views
40

我有一臺運行Apache的Linux主機和一臺運行IIS的Windows主機。我有一個域指向Linux主機,需要將它的代理請求轉發給IIS;因此,我有阿帕奇以下虛擬主機定義(這只是正常):使用SSL代理

<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內部服務器錯誤消息。在錯誤日誌之一斑表明:

[週三7月20日8時35分34秒2011] [錯誤] [客戶76.168.166.70] SSL代理 請求www.wileybits.com:80但尚未啓用[提示: SSLProxyEngine] [週三7月20日8時35分34秒2011] [錯誤]代理:HTTPS: 未能啓用74.166.186.70:443支持SSL(win.acme.com)

做的通知代理請求似乎是針對錯誤的域(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

爲什麼我得到這個負呢? – ekkis

回答

78

想通了......顯然我可以這樣做:

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

和它的作品就好了!

[解決方案從mikeg's posting上3cx.org來到]

+8

對於那些後來發現這一點的人來說:我的問題不包括'SSLProxyEngine on'。請注意,它不能位於'.htaccess'文件中。 – robbrit

+2

你還需要'sudo a2enmod頭代理ssl緩存' 並添加SSLEngine(否則我得到了一個錯誤'[錯誤]糟糕,找不到'www.somedomain.com:0'的RSA或DSA服務器證書?')和具有相同密鑰和證書的SSLCertificateFile/SSLCertificateKeyFile – bumpmann

+8

對於其他看這個並且可能會感到困惑的人:'Front-End-Https'是[Microsoft應用程序的專有標誌](http://en.wikipedia.org/ wiki/List_of_HTTP_header_fields),並且在代理其他服務時不需要設置。 –

0

不確定這個錯誤的原因,但你可能希望你嘗試使用Squid或Varnish來實現這一點。以前,我用Squid代理一個安全的Windows IIS實例,沒有問題。