【问题标题】:How do I force all websites / a single domain with a universal command to use HTTPS?如何使用通用命令强制所有网站/单个域使用 HTTPS?
【发布时间】:2017-06-22 10:29:22
【问题描述】:

我刚刚安装了一个新的控制面板 (Vesta),它通过 Let'sEncrypt 自动支持 SSL。现在我的所有域都有 SSL 证书,但所有域仍然使用 http://(使用 domain.com 时)打开,而不是 https://。

现在我希望所有域都默认开始使用 https://。我该怎么做?

我没有很多域 (~15),所以我不介意每个域的方法,但如果可能的话,一个服务器范围的单个脚本会更好。如果按域进行,我确实想要一个通用脚本(例如 $domain,而不是字面上的 example.com)。

为了记录,我有一个 Ubuntu 16.04 VPS,运行 Nginx+php-fpm,没有 Apache。

附注我通过谷歌看到了一堆关于这个主题的帖子,但对我没有帮助,都张贴在 SO 上,没有结束投票。因此我把它放在这里。

老实说,在这个时代默认开启 SSL 太难了,老实说这很奇怪,因为它应该几乎和食物、饮料和头顶的屋顶一样标准..

【问题讨论】:

    标签: ssl nginx


    【解决方案1】:

    您可以创建一个监听端口 80 的服务器块,将 HTTP 301 重定向到您的 HTTPS 域。

    server {
        listen       80;
        server_name  yourdomain.com;
        return       301 https://yourdomain.com$request_uri;
    }
    

    您也可以有一个服务器块而不是同时侦听 80 和 443,但使用 HTTP 严格传输安全 (HSTS) 而不是 443。

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    

    启用此标头后,端口 80 上的请求将被 301 重定向到 443。浏览器会记住您的域更喜欢 HTTPS,随后的请求将在请求 80 流量之前重定向到 443。在 Chrome 中,这在您的网络选项卡上显示为 307 内部重定向。

    重要提示:请注意,这与 预加载 HSTS 不同,后者在互联网上更永久。

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    

    希望对你有帮助。

    干杯, 伊恩

    【讨论】:

    • 为了记录,我必须将这些代码放在位于 /etc/nginx 的 nginx.conf 文件中的 http { } 标记中,对吧?还是我错了?这不包括 www 到非 www 重定向,对吗?更新:试过了,并没有改变任何事情..
    • 轻微更新,而不是将其直接放入 nginx.conf 文件中,该文件本身包含放入 conf.d 文件夹中的所有内容,因此我制作了一个名为“https.conf”的新脚本。我已将您的台词放在该文件夹中,但没有任何效果。
    • 我们的设置必须不同。我不使用 conf.d 文件夹。我只是使用从源代码编译后提供的 nginx.conf。很抱歉没有解决你的问题。不知道为什么投反对票。不是每个回应都能解决问题。反对票阻止了试图提供帮助的人。干杯。
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2016-04-27
    • 2018-05-09
    • 2014-01-20
    • 2020-07-03
    • 2015-02-27
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多