apache - 为什么我的单个启用 SSL 证书的域出现 https www 重定向错误?

我的网络服务器在云中,是 Vultr 上的 VPS。我在 apache.conf 文件中添加了以下几行:

Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)
    RewriteRule ^.*$ https://%1/$1 [R=301,L]
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

这些行会将 http://www.example.comhttp://example.com 重定向到 https://example.com。它工作得很好。我不使用 htaccess 文件。

我总是试着去想一个用户是怎么把事情搞砸的,在这种情况下,我认为他们可以输入 https://www.example.com。果然,它把事情搞砸了。

我想补充一点,我只有 example.com 域的 LetsEncrypt 证书。我没有一个 www.example.com 子域,就像许多其他人添加到他们的服务器一样。

在域 /etc/apache2/sites-available/example.com.conf 的站点可用文件中,我有:

<VirtualHost  example.com:80>
   ServerAdmin admin@example.com
   ServerName  example.com
   ServerAlias  example.com
   # above line eliminates www.example.com
   DocumentRoot /var/www/example.com
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我没有为 443 端口使用 VirtualHost 文件。

我已阅读有关 https://www.example.com 问题的其他 stackoverflow 评论和问题。我引用了一个几乎相同的请求,但它并没有消除我的问题,但也许他们有 www 子域的证书,允许在那里提出的解决方案起作用。 https://stackoverflow.com/questions/29029049/

我的假设是可能:

  1. 我的 apache.conf 代码有错误。
  2. 我需要 www 子域的附加证书。
  3. 其他一些解决方案。

在这里进行的最佳方式是什么?或者其他人是否只是忽略了这一点,因为它会被浏览器尖叫该网站有多不安全而蒙上阴影?

回答1

我需要一个 www 子域的额外证书。

如果您想通过 https://www.example.com 访问该站点,那么您需要一个完全针对该域的证书,即 www.example.com 而不仅仅是 example.com。没有办法解决这个问题,因为只有在建立 TLS 连接后,即在证书验证之后,服务器才能发出任何重定向。

回答2

经过大量研究,我决定回到 https://www.example.com 方法。有几个原因。

大多数网站不会注意到使用 www 和不使用它之间的区别。大型网站会,因为它们需要额外的子域才能正确使用 cookie。

另一个问题是 DNS 设置中的 CNAME。最好不要将裸域与 CNAME 一起使用。例如,Namecheap 不允许这样做。您必须将 www 子域与 CNAME 条目一起使用。

另一个问题是电子邮件。我不知道所有细节,但不使用 www 子域可能会搞砸电子邮件。

有些浏览器实际上会从 URL 中删除 www,即使它们在显示地址时它就在那里。还有一些关于 www 将被完全删除的未来的讨论。

但截至今天,人们一致认为必须在非常基本的层面上更改 DNS 系统,以适应地址中没有 www。

这些事情让我对使用非 www 地址域 URL 保持警惕。现在,我将回到旧学校https://www.example.com

相似文章

随机推荐

最新文章