www.example.com
我有一台运行 Apache 的服务器,上面有一个运行 HTTPS 站点example.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 [email protected]
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
。
知道为什么吗?
答案1
您在“newsite”虚拟主机定义中没有该SSLEngine On
指令,因此它仅响应端口 443 上的纯 HTML。您需要为每个应该使用 SSL 的虚拟主机指定 SSL 指令。
您可能需要为 newsite 指定以下指令:
SSLProxyEngine On
SSLProxyCheckPeerName Off
前者对于 SSL 代理是必需的,而后者仅在未颁发证书时才是必需的localhost
。
此外,您可能想要删除该<Proxy>
部分,因为它仅正向代理需要。