这里分两步介绍,第一部是配置 https , 第二步是开启 http2 支持。事实上开启 http2 支持,必须配置站点使用 https 传输协议。
HTTPS
为站点部署开启 HTTPS 支持,需要一个可信任的第三方 SSL 证书,然后针对不同的服务器环境进行配置。
我选择使用Certbot来部署一个免费、可自动更新的由Let’s Encrypt提供的期限为 90 天的权威可信任证书。Certbot官网根据不同的服务器环境提供了不同的部署方法,我使用 ubuntu + openresty(nginx) ,根据官网介绍部署方式如下:
- 安装 certbot(或者通过源码安装certbot)
$ sudo apt-get update
$ sudo apt-get install python-software-properties software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
- 获得证书
$ certbot(or path/certbot-auto) certonly --webroot -w /path/your-web-root -d your-domain.com -d www.your-domain.com
执行上述代码后,会在系统的/etc/letsencrypt/live
目录下生成以your-domain.com
的目录,里面会生成cert.pem``chain.pem``fullchain.pem``privkey.pem``README
几个文件接下来在 nginx 配置文件中需要用到fullchain.pem``privkey.pem
两个文件,这有关SSL证书链
的概念,超出本文叙述范围。
3. 配置 nginx,在 server 中与 https 相关的配置如下
server {
...
listen 443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
...
}
- 执行
nginx -t
测试 nginx 配置是否正确,确认无误后,重启 nginx 服务。 - 设置证书自动更新。
上文说过Let’s Encrypt提供的免费证书期限为 90 天,certbot 提供了证书自动更新服务,通过源码安装则需要进行一些配置(配置系统的定时任务)。- (Ubuntu) 在
/var/spool/cron/crontabs/root
文件中添加以下配置:
0 0 * * * root /path/certbot-auto renew --quiet --no-self-upgrade
- 使用
certbot renew --dry-run
命令测试是否配置成功。
- (Ubuntu) 在
HTTP2
配置好 HTTPS 后开启 HTTP2 比较简单,两步即可完成。
- 重新编译
openresty
加入--with-http_v2_module --with-http_ssl_module
选项,替换系统中使用的nginx
执行文件:
./configure --with-http_v2_module --with-http_ssl_module
make // 不要 make install
关闭 nginx,使用编译生成的/resources/openresty-1.11.2.2/build/nginx-1.11.2/objs/nginx
文件替换系统正使用的/usr/local/openresty/nginx/sbin/nginx
文件,重启 nginx 即可。
2. 修改 nginx 配置。在 listen 后添加 http2 ,如下所示:
server {
...
listen 443 ssl http2;
...
}
如果一开始就开启了 nginx 的 h2 模块,就不需要第一步了。至此,配置 https 并开启 http2 完成。
发表回复