Ubuntu

使用 Apache 代理將子域轉發到另一個埠的問題

  • June 26, 2018

我有一個執行 Apache 的伺服器,其中一個 HTTPS 站點在www.example.comexample.com. 我正在嘗試添加一個新站點,該站點將轉發newsite.example.com到同一伺服器上的另一個埠(Docker 容器正在偵聽這個另一個埠)。

我的 Apache 站點配置如下,

www.example.com.conf

<VirtualHost *:80>
       ServerName www.example.com
       ServerAlias example.com
       Redirect permanent / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
      ServerName www.example.com
      ServerAlias example.com
      ServerAdmin support@example.com
      DocumentRoot /home/webadmin/www.example.com/

      <Directory /home/webadmin/www.example.com/>
               Order allow,deny
               Allow from all
               Require all granted
               Allowoverride All
      </Directory>

      SSLEngine on
      SSLCertificateFile    /etc/apache2/ssl/example.com.crt
      SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
      SSLCACertificateFile /etc/apache2/ssl/example.com.ca.crt
      Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

newsite.example.com.conf:

<VirtualHost *:443>
       ServerName newsite.example.com
       ServerAlias newsite.example.com
       ProxyPreserveHost On
       ProxyRequests Off
       ProxyPass / https://localhost:3000
       ProxyPassReverse / https://localhost:3000
       <Proxy *>
               Order allow,deny
               Allow from all
       </Proxy>
</VirtualHost>

newsite.example.com 的 SSL 證書由 docker 應用程序處理。

sudo a2ensite newsite.example.com.conf && sudo service apache2 reload嘗試訪問任何一個站點後都會失敗,並顯示ERR_SSL_PROTOCOL_ERROR.

知道為什麼嗎?

SSLEngine On您在“newsite”虛擬主機定義中沒有該指令,因此它僅響應埠 443 上的純 HTML。您需要為每個應該使用 SSL 的虛擬主機指定 SSL 指令。

您可能希望為 newsite 指定以下指令:

SSLProxyEngine On
SSLProxyCheckPeerName Off

前者對於 SSL 代理是必需的,後者僅在沒有為localhost.

此外,您可能希望刪除該<Proxy>部分,因為僅轉發代理需要該部分。

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