Apache-2.2

帶有 mod-proxy 和 SSL 的 Apache VirtualHost

  • January 22, 2019

我正在嘗試設置具有多個 Web 應用程序的伺服器,這些應用程序都將通過 apache VirtualHost(執行在同一台伺服器上的 apache)提供服務。我的主要限制是每個 Web 應用程序都必須使用 SSL 加密。在Google搜尋了一段時間並查看了有關 stackoverflow 的其他問題後,我為 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>

即使https://host.example.org:8443>可以訪問,但<https://host.example.org不能訪問,這違背了我的虛擬主機配置的目的。Firefox 抱怨說,即使它成功連接到伺服器,連接也會中斷。我還在 apache 的 error.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 

在 Web 應用程序(Tomcat 伺服器)上,訪問日誌顯示了一個奇怪的訪問請求:

"?O^A^C / HTTP/1.1" 302

以下是我直接連接到https://host.example.org:8443時得到的正確訪問請求:

"GET / HTTP/1.1" 302

最後我還應該提到,當我不使用 SSL 時,虛擬主機工作得非常好。

我怎樣才能使這項工作?

最後我找到了一種讓它工作的方法。首先,我嘗試了 Dave Cheney 的建議,因此我為重定向到 Tomcat 非 SSL 埠的 apache 伺服器安裝了另一個證書(因此代理重定向到http://localhost:8080/)。不幸的是,它並沒有完全工作,因為在網路瀏覽器中,https 在連接後立即轉換為 http。所以我恢復使用https://localhost:8443/並使其工作的最後一步是再次添加 SSLProxyEngine。

這是生成的 VirtualHost 配置:

&lt;VirtualHost 1.2.3.4:443&gt;
   ServerName host.domain.org

   &lt;Proxy *&gt;
       Order deny,allow
       Allow from all
   &lt;/Proxy&gt;

   SSLEngine on
   SSLProxyEngine On
   SSLCertificateFile /etc/apache2/ssl/certificate.crt
   SSLCertificateKeyFile /etc/apache2/ssl/certificate.key

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyPass / https://localhost:8443/
   ProxyPassReverse / https://localhost:8443/
&lt;/VirtualHost&gt;

引用自:https://serverfault.com/questions/25423