Ubuntu
使用 Apache 代理將子域轉發到另一個埠的問題
我有一個執行 Apache 的伺服器,其中一個 HTTPS 站點在
www.example.com
和example.com
. 我正在嘗試添加一個新站點,該站點將轉發newsite.example.com
到同一伺服器上的另一個埠(Docker 容器正在偵聽這個另一個埠)。我的 Apache 站點配置如下,
<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>
部分,因為僅轉發代理需要該部分。