使用 Apache 代理将子域名转发到另一个端口时出现问题

使用 Apache 代理将子域名转发到另一个端口时出现问题

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>部分,因为它仅正向代理需要。

相关内容