Tôi đang cố gắng thiết lập một máy chủ có nhiều ứng dụng web, tất cả sẽ được phục vụ thông qua apache Virtualhost (apache chạy trên cùng một máy chủ). Hạn chế chính của tôi là mỗi ứng dụng web phải sử dụng mã hóa SSL. Sau khi googling một lúc và xem xét các câu hỏi khác trên stackoverflow, tôi đã viết cấu hình sau cho Virtualhost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Mặc dù https://host.example.org:8443 có thể truy cập được, nhưng https://host.example.org thì không, điều này đánh bại mục đích cấu hình máy chủ ảo của tôi. Firefox phàn nàn rằng, mặc dù đã kết nối thành công với máy chủ, kết nối đã bị gián đoạn. Tôi cũng nhận được cảnh báo sau trong lỗi của apache.log:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
Trên ứng dụng web (máy chủ Tomcat) nhật ký truy cập hiển thị yêu cầu truy cập lạ:
"?O^A^C / HTTP/1.1" 302
Sau đây là lần truy cập chính xác mà tôi nhận được khi kết nối trực tiếp với https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Cuối cùng tôi cũng nên đề cập rằng máy chủ ảo hoạt động hoàn toàn tốt khi tôi không sử dụng SSL.
Làm thế nào tôi có thể làm cho công việc này?
ProxyPreserveHost On
nó hầu như luôn luôn sai, vô dụng và hầu như luôn luôn phá vỡProxyPassReverse
. Như một lưu ý phụProxyRequests off
là mặc định, do đó, dư thừa.