Apache2, vhosts and SSL



我的设置:
site1.com |端口 80
site2.com |端口 80
panel.site1.com |将端口 80 流量重写为 443

这一直有效,直到有人尝试 https://站点[x].com并且服务器将他们重定向到我的面板。我需要这个面板对~100个使用它的人开放,但我不希望错误的人偶然发现它。

我尝试添加:

<VirtualHost *:443>
    ServerAdmin me@email
    ServerName site1.com
    ServerAlias www.site1.com
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

到 site1.com 的 vhost,但它仍然返回控制面板。我相信这是因为在应用 Apache 虚拟主机规则之前会检查证书,但我不太确定。是否有解决此问题的方法,或者仅仅是Apache2 + SSL的限制?

Apache 文档指出了这一点。

如果在 包含最具体的匹配 IP 地址的虚拟主机和 端口组合,然后是第一个列出的与之匹配的虚拟主机 将被使用。

因此,看起来您已将panel.site1.com<VirtualHost>部分保留在所有其他虚拟主机部分之上。因此,对https://site[x].com的请求将落在其中,因此该问题与SSL无关。

更新:

您可以尝试以下配置,它应该可以工作。

<VirtualHost *:80>
    ServerName www.site1.com
    ServerAlias site1.com
    DocumentRoot /var/www/site1
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^panel.site1.com
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
</VirtualHost>
<VirtualHost *:80>
    ServerName www.site2.com
    ServerAlias site2.com
    DocumentRoot /var/www/site2
</VirtualHost>
<VirtualHost *:443>
    ServerName panel.site1.com
    DocumentRoot /var/www/panel
    SSLEngine on
    SSLOptions +StrictRequire
    SSLCertificateFile /opt/apache1/conf/server.crt
    SSLCertificateKeyFile /opt/apache1/conf/server.key
</VirtualHost>

这是如何工作的

  1. 当请求是http://site1.com第一个VirtualHost部分将被选中。
  2. 当请求http://site2.com时,将选择第二个VirtualHost部分。
  3. 如果请求到达http://site[x].com则首先VirtualHost部分将被选中。
  4. 如果请求到达http://panel.site1.com则请求将被重定向到https://panel.site1.com并选择第三个VirtualHost部分。

最新更新