nginx配置HTTP/2
配置http/2必须要https,免费的ssl证书挺多的(个人用感觉差距不大),比如阿里跟腾讯的赛门铁克免费证书,更多可以自行去百度查找。
按照centos7.2配置lnmp操作,不同环境配置可能不一样。
1、配置https+http/2
vi /etc/nginx/conf.d/run.la.conf #run.la.conf 是要修改的网站配置文件
#将listen 80;修改为listen 443 ssl http2; #并且将下面的内容帖上去。 ssl_certificate run.la.pem; #证书公钥对应的目录 ssl_certificate_key run.la.key; #证书私钥对应的目录 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on;
systemctl restart nginx.service #重启nginx,使配置生效。
这个时候https+http/2就已经配置好了,但是http的页面依然还没有跳转。
2、配置http跳转
vi /etc/nginx/conf.d/run.la.conf #run.la.conf 是要修改的网站配置文件
将下面内容帖到文件末尾并保存。
server { listen 80; server_name run.la; #网站域名 return 301 https://run.la/$request_uri;#https://域名/$request_uri }
systemctl restart nginx.service #重启nginx,使配置生效。
如果在程序兼容的情况下,网站已经可以正常运行了。
3、关于chrome 51+与火狐
但是还有一点要说的,chrome 51+测试可能是不支持http/2的,因为chrome从51版本起抛弃了NPN,而改用最新的ALPN,可是大部分操作系统自带的openssl都不是1.0.2以上版本,而openssl 1.0.2以下版本不支持ALPN,因此在浏览器在与服务端协商的情况下默认降成了http1.1,而火狐是直接就提示不安全,也不降到http1.1,不给用户访问了。
支持openssl 1.0.2操作系统(从nginx官网搬的):
Operating System | OpenSSL Version | ALPN and NPN Support |
---|---|---|
CentOS/Oracle Linux/RHEL 5.10+ | 0.9.8e | Neither |
CentOS/Oracle Linux/RHEL 6.5+, 7.0+ | 1.0.1e | NPN |
Ubuntu 12.04 LTS | 1.0.1 | NPN |
Ubuntu 14.04 LTS | 1.0.1f | NPN |
Ubuntu 16.04 LTS | 1.0.2g | ALPN and NPN |
Debian 7.0 | 1.0.1e | NPN |
Debian 8.0 | 1.0.1k | NPN |
想要让chrome 51+版本支持你网站的http/2,nginx给了三种解决方法:
1)、升级操作系统,比如ubuntu 16.04。
2)、自己通过源码编译nginx,并且使用openssl 1.0.2构建,但是以后更新程序非很繁重。
3)、使用容器。
英语水平有限,大家可自行去nginx官网看。
openssl version #查看服务器openssl版本