我有许多虚拟主机为 apache 站点提供服务。每个站点都有自己的配置文件,许多站点都设置了 SSL 证书。
00_default.conf 文件<VirtualHost *:80>
指向静态 404 类型页面
这一切都运行良好...我的问题是,如果您以 https 模式访问没有 SSL 设置或没有配置文件的站点,它会默认使用它找到的第一个包含的配置文件中的 SSL 证书<VirtualHost *:443>
。
我假设我需要在 00_default.conf 中创建一个规则,以捕获通过 HTTPS 请求时不存在的页面请求。到目前为止,我还没有找到可行的配置。
答案1
有两件事:
- 当您使用 HTTPS 连接到未提供有效 TLS 证书(其中包含您在 URL 中输入的网站名称)的网站时,您始终会收到浏览器警告/错误消息。指定其他虚拟主机来处理这些请求不会改变这一基本事实。
- 指定特定虚拟主机成为默认的 HTTPS 虚拟主机只会改变将出示哪个(不匹配的) TLS 证书以及将显示哪些 Web 内容。
正确解决此问题的最佳方法是为您在 Web 服务器上托管的所有网站设置 HTTPS。
如果没有的话:可能最简单的方法是将 HTTPS VirtualHost 条目添加到您现有的条目中,00_default.conf
结果如下:
<VirtualHost _default_:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/www.example.com/
</VirtualHost>
<VirtualHost _default_:443>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/www.example.com/
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
SSLCompression off
SSLUseStapling on
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/www.example.com/chain.pem
</VirtualHost>