Apache 不限制域/子域端口组合

Apache 不限制域/子域端口组合

当我想将域/子域组合限制到特定端口时遇到了一个问题。

例如,当我只希望以下域/子域端口组合起作用时

https://domain.com:99001
https://subdomain.domain.com:99003

我发现它们不仅有效,而且下面的组合也有效,但我试图阻止它发生

https://domain.com:99003
https://subdomain.domain.com:99001

下面的脚本是我用来尝试实现该目标的

<VirtualHost *:99001>
    #RequestHeader set X-Forwarded-Proto "https"
    ProxyPreserveHost On
    ServerName www.domain.com
    ServerAlias MYSERVER

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/server.crt
    SSLCertificateKeyFile /etc/apache2/ssl/server.key


    <Location />
        SSLRequireSSL
    </Location>

    ProxyPass / http://11.11.11.20:99011/
    ProxyPassReverse / http://11.11.11.20:99011/
</VirtualHost>

<VirtualHost *:99003>
    #RequestHeader set X-Forwarded-Proto "https"
    ProxyPreserveHost On
    ServerName subdomain.domain.com
    ServerAlias MYSERVER

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/server.crt
    SSLCertificateKeyFile /etc/apache2/ssl/server.key

    <Location />
        SSLRequireSSL
    </Location>

    ProxyPass / http://11.11.11.20:99013/
    ProxyPassReverse / http://11.11.11.20:99013/
</VirtualHost>

我错过了什么?

答案1

对于基于名称的虚拟主机,Apache 使用指令ServerName和 anyServerAlias指令以及端口号来标识哪个虚拟主机应接收特定的传入请求。 在您的例子中,对备用端口的请求不得与任何虚拟主机匹配,换句话说,指令ServerName和 anyServerAlias指令在所有虚拟主机中必须是唯一的。

此外,使用ServerAlias指令表明您正在使用能够保护多个域的安全证书。如果证书上的域在虚拟主机之间共享,则上述问题会变得更加严重,因为请求会继续进行,而不会向客户端发送安全证书错误。

相关内容