http 流量与 apache 上的 https 流量显示不同的目录

http 流量与 apache 上的 https 流量显示不同的目录

我在 ubuntu 14.04 上运行 apache2,并使用 Let's Encrypt 设置了 SSL。

在我的一个域 (domainA) 上,它运行正常。我可以通过以下地址访问它:

http://domainA.com
http://www.domainA.com

或者

https://domainA.com
https://www.domainA.com

但是,我还有其他域指向该框,并为每个域设置了虚拟服务器。我以与设置域 A 相同的方式设置它们(请参阅如果你想知道如何

在我的附加域上,通过 https 的流量显示正确的虚拟内容 - 但通过 http 的流量只显示根目录(因此显示默认的 index.html)。

在 /etc/apache2/sites-available 中我有以下内容:

000-default.conf
default-ssl.conf
domainA.com.conf
domainA.com-le-ssl.conf
domainB.com.conf
domainB.com-le-ssl.conf

它们的设置完全相同,只有相关信息发生了改变。

domainA.conf 如下所示:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName domainA.com
    ServerAlias www.domainA.com
    DocumentRoot /var/www/html/domainA/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

domainB.conf 看起来完全相同,只是用“domainB”代替了 domainA。domainA.com-le-ssl.conf 文件看起来几乎完全相同,只是包含所有适当的 SSL 文件并位于端口 443 上(它是在我使用 Let's Encrypt 创建文件时动态生成的 - 我没有碰过它们)

因此 domainB.conf 如下所示:

<VirtualHost *:80
    ServerAdmin [email protected]
    ServerName domainB.com
    ServerAlias www.domainB.com
    DocumentRoot /var/www/html/domainB/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DomainB.com-le-ssl.conf 如下所示(与 DomainA 相同,仅相关名称有所改变):

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName domainB.com
    ServerAlias www.domainB.com
    DocumentRoot /var/www/html/domainB/public_html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/domainB.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domainB.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/domainB.com/chain.pem
</VirtualHost>
</IfModule>

domainA 上的 http 和 https 运行没有问题,都显示相同的内容。

domainB 上的 http 将我带到 /var/www/html

domainB 上的 https 将我带到 /var/www/html/domainB/public_html (如预期)

DNS 正确地指向了我的服务器并指向了相应的域 —— 所以我认为这不是 DNS 问题,而是配置问题或者 SSL 问题?

我只是想知道为什么和/或我如何改变这种情况?有谁知道为什么它可能对第一个有效,但对其他都无效吗?

我觉得它正在为 HTTP 流量选择 000-default.conf。

我的 000-default.conf 如下所示:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

答案1

因此显然在某些时候网站的 HTTP 版本已被禁用(可能是在启用 HTTPS 版本时)。

一旦我执行以下操作,它们就会通过端口 80 和端口 443(分别为 http 和 https)工作:

sudo a2ensite domainB.com.conf

然后我将用这个重新加载 apache:

sudo service apache2 reload

然后它将获取站点的 HTTP 版本的配置并进行适当的引导。

我决定强制所有流量使用 HTTPS - 因此我在 HTTP conf (/etc/apache2/sites-available/domainB.com.conf) 中添加了以下行

Redirect permanent / https://domainB.com

现在,如果有人尝试通过 HTTP 访问该网站,它会将他们引导到适当的位置。

希望这对其他人有帮助:)

相关内容