2011-07-20 36 views
40

Tôi có một máy chủ Linux đang chạy Apache và một máy chủ Windows đang chạy IIS. Tôi có một tên miền trỏ đến máy chủ Linux và cần phải chuyển tiếp (proxy) yêu cầu cho nó để IIS; Do đó, tôi có định nghĩa máy chủ ảo sau trong Apache (hoạt động tốt):Ủy quyền với 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> 

bây giờ tôi muốn thêm hỗ trợ SSL; định nghĩa trở thành:

<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> 

tôi có giấy chứng nhận hợp lệ và đáng tin cậy trên cả hai máy chủ web và nếu tôi truy cập https://win.acme.com tất cả là tốt, tuy nhiên, khi tôi ghé thăm https://www.acme.com tôi nhận được một thông báo lỗi 500 máy chủ nội bộ. Một cái nhìn vào các bản ghi lỗi cho thấy:

[Wed 20 tháng 7 08:35:34 2011] [lỗi] [khách hàng 76.168.166.70] SSL Proxy yêu cầu www.wileybits.com:80 nhưng không được kích hoạt [ gợi ý: SSLProxyEngine] [Wed 20 tháng 7 08:35:34 2011] [lỗi] proxy: HTTPS: thất bại trong việc cho phép hỗ trợ ssl cho 74.166.186.70:443 (win.acme.com)

làm báo rằng yêu cầu proxy có vẻ là tên miền sai (wileybits) ... tên miền mà nó hiển thị cũng được lưu trữ bởi máy chủ Apache của tôi nhưng tôi không hiểu tại sao nó hiển thị trong nhật ký của acme.com (tra cứu DNS ngược có lẽ?)

trong mọi trường hợp, tôi thiếu gì?

cảm ơn trước - ekkis

p.s. tên máy chủ và các địa chỉ đã được thay đổi để bảo vệ sự vô tội :)

* cập nhật *

với:

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

nó dường như làm việc tốt, nhưng dĩ nhiên, Windows hostname trở thành hiển thị, không được chấp nhận trong trường hợp của tôi

Tôi cũng đã thử (thay vì mod_rewrite):

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

nhưng cùng một lỗi

+0

tại sao tôi bị trừ điểm? – ekkis

Trả lời

78

figured it out ... dường như tôi có thể làm điều này:

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

và nó hoạt động tốt!

[giải pháp đến từ mikeg's posting trên 3cx.org]

+8

Đối với những người tìm thấy vấn đề này sau: vấn đề của tôi không bao gồm 'SSLProxyEngine on'. Lưu ý rằng nó không thể có trong một tập tin '.htaccess'. – robbrit

+2

Bạn cũng cần 'sudo a2enmod tiêu đề proxy ssl cache' và thêm SSLEngine vào (nếu không tôi gặp lỗi' [error] Rất tiếc, không có chứng chỉ máy chủ RSA hoặc DSA nào được tìm thấy cho 'www.somedomain.com:0' ?!') và SSLCertificateFile/SSLCertificateKeyFile với cùng khóa & chứng chỉ – bumpmann

+8

Đối với những người khác xem xét điều này và có thể bị nhầm lẫn:' Front-End-Https' là [cờ độc quyền cho các ứng dụng Microsoft] (http://en.wikipedia.org/ wiki/List_of_HTTP_header_fields) và không cần phải được đặt khi ủy quyền cho các dịch vụ khác. –

0

Không chắc chắn nguyên nhân gây ra lỗi này, nhưng bạn có thể muốn thử dùng Squid hoặc Varnish để thực hiện việc này. Trước đây, tôi đã sử dụng Squid để proxy một cá thể Windows IIS bảo mật mà không có vấn đề gì.