如何使用通用命令强制所有网站/单个域使用HTTPS?

时间:2017-06-21 21:22:31

标签: ssl nginx

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

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

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

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

<子> P.S。我看到了很多关于这个主题的帖子,通过谷歌,没有帮助我,所有帖子都没有关闭投票。所以我把它放在这里。

老实说,在这个时代默认使用SSL非常困难,因为它应该像食物,饮料和头顶上的标准一样标准化。 < /子>

1 个答案:

答案 0 :(得分:-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上的请求将被重定向到443.浏览器会记住您的域更喜欢HTTPS,后续请求会在请求80个流量之前重定向到443。在Chrome中,它在您的网络标签上显示为307内部重定向。

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

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

我希望有所帮助。

干杯, 伊恩