清泉小屋
宝塔LNMP环境站点SSL配置及加载速度优化
宝塔LNMP环境站点SSL配置及加载速度优化

前言

最近笔者在学习PHP后端的开发,在阿里云学生机上搭建了本博客和一些供学习使用的测试站点。为了更好的访问速度和浏览体验,我做了很多尝试。这篇文章也介绍了一些关于SSL证书、和某里云备案做斗争的内容。

站点SSL配置

SSL证书签发

都已经9102年了,还有什么网站不支持HTTPS啊?!所以我的博客也一定要支持啊,在SSL的选择上我选择了免费的Let’s Encrypt方案,由于宝塔面板自带的签署功能还不支持Wildcard证书,所以我目前使用的证书还是单一证书的签署模式。我使用的域名管理商是Cloudflare,我会在下面以Cloudflare为例子签发证书:

  1. 在宝塔面板网站选项里面选择要修改站点的设置选项卡,点击SSL菜单,这里我们是用Let's Encrypt。因为某里云的备案要求,网站的80端口被强制关闭,所以比较方便的文件验证无法使用,这里我们使用DNS验证。这里很坑的是Cloudflare并不被宝塔面板支持自动签发,所以这里我们只能选择选择DNS接口里面的手动解析,接下来一步一步跟着向导做

https://cdn.blog.moonly.cyyself.name/wp-content/uploads/2019/02/20190216-01.png

  1. 接下来打开Cloudflare后台,在域名DNS解析的选项卡中,我们按照刚才向导给我们的DNS TXT记录,将其写入DNS就里面,保存,等待TTL时间生效

https://cdn.blog.moonly.cyyself.name/wp-content/uploads/2019/02/20190216-02.png

  1. 然后点击验证,如果出现公钥私钥的显示则说明签发成功,一般来说,如果你的域名已经备案完成或者你的主机在国外,你可以打开强制HTTPS开关,这样通过80端口的HTTP访问可以直接自动跳转到HTTPS上

https://cdn.blog.moonly.cyyself.name/wp-content/uploads/2019/02/2019-02-16-03.png

实际上,我们可以通过开启HTTPS的方式跳过域名备案这个问题,不过缺点是80端口被禁止无法自跳转,访问的时候必须加上HTTPS请求头

站点HSTS Preload配置

配置好了SSL证书之后,其实还有一个优化选项。在现代浏览器之中,我们一般访问到的HTTPS站点都是通过HTTP请求过后,服务器返回HTTP 301/302请求将协议升级为HTTPS,这个过程实际上多了很多不必要的时间消耗和故武器资源浪费,于是HSTS协议应运而生。

  1. HSTS是什么?
    HSTS的出现就是解决这些问题的。HSTS的作用除了节省HTTPS通信RT和强制使用HTTPS,还包括:
  • 阻止基于SSLStrip的中间人攻击;
  • 万一证书有错误,则显示错误,用户不能回避警告。

HSTS的具体工作机制可描述如下:服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做301跳转到HTTPS。而无需任何网络过程。

目前大部分浏览器对HSTS的支持已经相当完美,具体各浏览器和版本的支持情况可以在http://caniuse.com/#search=HSTS 上查看。 但是HSTS是有缺陷的,第一次访问网站的客户端,HSTS并不工作。 要解决这个问题,就要了解我们下面要讲解的HSTS preload list

  1. HSTS preload list是什么?

HSTS preload list是为了弥补上述协议缺陷而设计的一个网站名单,在该名单列表内的网站在现代浏览器(诸如Chrome、Firefox)加载的时候,浏览器会先读取这个名单,如果域名在列,则使HSTS协议进行通信

想要加入这个名单需要满足:

  1. 有效的证书
  2. 所有HTTP流量重定向到HTTPS
  3. 确保所有子域名启用HTTPS
  4. 主域名含有HSTS响应头

配置方法

  1. 首先确保该域名下所有的子站点均支持HTTPS,并都支持HTTPS 301跳转

  2. 在主域名的Nginx/Apache的配置当中添加如下一行(这里以Nginx为例):

这里面max-age代表过期时间

https://cdn.blog.moonly.cyyself.name/wp-content/uploads/2019/02/2019-02-16-04.png

  1. https://hstspreload.appspot.com网页提交申请,一般几天就可以审核通过,至于被浏览器携带到发行版本就要有一定的时日

开启HTTP2协议支持

HTTP 2.0协议的出现,弥补了很多HTTP 1.X时代的遗留问题,可以大幅度提升网页加载行性能。相比于HTTP 1.X,HTTP 2.0支持了多路复用、二进制分帧等新特性,在相同的多图片网页测试情况下,HTTP 2.0使用更少的时间,详细可以参见知乎回答HTTP/2.0 相比1.0有哪些重大改进?

使用HTTP2的前提条件是通信处于SSL下,所以SSL是必须的。

配置之前首先确保宝塔面板的Nginx软件版本号大于1.14,如果不满足请手动到软件管理升级Nginx

首先在网站管理的相应域名设置选项,选择配置文件(或者手动编辑站点Nginx配置文件),找到listen 443 ssl;这一行,将其改为listen 443 ssl http2;,然后在软件管理里面重启Nginx,如果没有报错说明配置生效。

如果想在浏览器检测站点是否使用HTTP2协议,可以直接打开F12调试控制台,在网络选项卡下点开任意页面资源,如过在详情中看到Version:HTTP/2.0的字样则说明该站点开启HTTP 2.0

https://cdn.blog.moonly.cyyself.name/wp-content/uploads/2019/02/2019-02-16-05.png

文章参考:Wilddog Blog

https://secure.gravatar.com/avatar/289357b0132960f9f210a4e2029e6037?s=256&d=mm&r=g

luoyue

文章作者

发表评论

textsms
account_circle
email

清泉小屋

宝塔LNMP环境站点SSL配置及加载速度优化
前言 最近笔者在学习PHP后端的开发,在阿里云学生机上搭建了本博客和一些供学习使用的测试站点。为了更好的访问速度和浏览体验,我做了很多尝试。这篇文章也介绍了一些关于SSL证书、和某…
扫描二维码继续阅读
2019-02-16