nginx启用HTTP2特性
本文于2017年2月底完成,发布在个人博客网站上。
考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。
查看当前nginx的编译选项
#./nginx -V
nginx version: nginx/1.9.15
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --prefix=/home/jackie/software/nginx --with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2g --with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 --with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 --with-http_ssl_module --with-threads --with-debug
启用http2支持
修改编译选项
在configure的选项中加入--with-http_v2_module,由于HTTP2需要SSL的支持,因此如缺少--with-http_ssl_module选项,还需要加入--with-http_ssl_module。
如下:./configure --prefix=/home/jackie/software/nginx \
--with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2g \
--with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 \
--with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 \
--with-http_ssl_module \
--with-threads \
--with-debug \
--with-http_v2_module
编译&升级
make & make install
修改配置文件,启用HTTP2,如下:
server {
listen 8443 ssl http2 default_server; # 增加 http2 default_server
server_name 192.168.0.107;
...
}
验证配置文件
#./nginx -t
nginx: the configuration file /home/jackie/software/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /home/jackie/software/nginx/conf/nginx.conf test is successful
启动nginx
#./nginx
验证HTTP2是否已启用
方法一
使用高版本如56.0.2924.87的Chrome,按照如下步骤操作
- 使用Chrome访问启用http2的站点,比如Jackie的环境为
https://192.168.0.107:8443。 - 新开TAB页,在地址栏中输入
chrome://net-internals/#http2,检查HTTP/2 sessions下的表格。 - 确认表格里是否出现了上一步访问的主机地址,比如192.168.0.107:8443。
方法二
使用curl命令,参考HTTP/2 with curl,执行如下命令,确认站点返回的协议是否为HTTP
curl --http2 -I 192.168.0.107:8443
如执行上述命令时遇到如下错误,说明系统当前安装的curl还不支持HTTP2协议。
curl https://192.168.0.107:8443/ --http2
curl: (1) Unsupported protocol
可以执行如下命令,检查系统当前安装的curl支持的特性列表,确认是否包含HTTP2。
curl -V
curl 7.47.0 (i686-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
从前述输出信息可以了解到,当前安装的curl还不支持HTTP2。
这时可参考如何启用curl命令HTTP2支持重新编译curl,加入HTTP2的支持。
方法三
安装Chrome插件HTTP/2 and SPDY indicator,安装完毕后访问启用HTTP2的站点,如果地址栏出现蓝色的闪电,说明站点已启用HTTP2。
不过Jackie身在墙内,安装总是失败,所以没有验证该方法的有效性。
完整的配置文件
如下是完整的配置文件,删除了一些与HTTP2特性不相关的内容。
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
charset utf-8;
server {
listen 8080;
server_name 192.168.0.107;
if ($scheme ~ http) {
return https://$server_name:8443$request_uri;
}
}
server {
listen 8443 ssl http2 default_server;
server_name 192.168.0.107;
ssl_certificate /home/jackie/software/nginx_conf/server.crt;
ssl_certificate_key /home/jackie/software/nginx_conf/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options nosniff;
location ~ / {
index index.jsp;
proxy_pass http://127.0.0.1:18080;
proxy_set_header referer '';
include proxy.conf;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
}
参考资料
nginx启用http2的资料
- Module ngx_http_v2_module
- nginx的http2.0性能太逆天了,HTTPS网站性能优化
- 升级Nginx到1.9.12并开启HTTP/2
- HAProxy、Nginx 配置 HTTP/2 完整指南
- Nginx HTTP2 编译
- 前端工程师学习Nginx入门篇
- 前端工程师学习Nginx实践配置HTTP2.0篇
- 解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题
- 或许是 Nginx 上配置 HTTP2 最实在的教程了
HTTP2的相关资料
- HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
- 前端性能优化的另一种方式——HTTP2.0
- HTTP 2.0 详细介绍
- HTTP2.0协议
- 前端工程师应该对 HTTP 了解到什么程度?从哪些途径去熟悉更好?
- 前端应该了解的HTTP2
- HTTP 2.0的那些事
- Why Domain Sharding is Bad News for Mobile Performance and Users
- http2 explained
- http2 explained
其它
- DNS工作流程及原理 浅说域名、IP与DNS的关系
- DNS工作流程及原理 域名、IP与DNS的关系
- 浏览器加载和渲染html的顺序
- JAVASCRIPT 装载和执行
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 浏览器的渲染原理简介
- 从浏览器的渲染原理讲CSS性能
nginx启用HTTP2特性的更多相关文章
- 两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置
序:一年多没更新博客园的内容了,core已经发生了翻天覆地的变化,想起2014年这时候,我就开始了从当时还叫k的那套preview都不如的vnext搭建这套系统,陆陆续续它每一次升级,我也相应地折腾, ...
- nginx 启用http2 https 无法访问的问题
原因: 1. openssl 版本过低 解决方法:进行升级 yum update openssl 2.ssl_ciphers 配置有问题 解决方法:修改为 ssl_ci ...
- 在Nginx/Openresty中启用http2支持
转自个人博客 chinazt.cc 以下摘自http2的介绍: HTTP/2 源自 SPDY/2 SPDY 系列协议由谷歌开发,于 2009 年公开.它的设计目标是降低 50% 的页面加载时间.当下很 ...
- nginx安装http2.0协议
1.HTTP2协议 HTTP 2.0 的主要目标是改进传输性能,实现低延迟和高吞吐量.从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响.所有HTTP 首部.值,以及它们的使用场景都 ...
- nginx支持http2协议
1.http2协议 HTTP 2.0 的主要目标是改进传输性能,实现低延迟和高吞吐量.从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响.所有HTTP 首部.值,以及它们的使用场景都 ...
- HTTP2特性预览和抓包分析
背景 近年来,http网络请求量日益添加,以下是httparchive统计,从2012-11-01到2016-09-01的请求数量和传输大小的趋势图: 当前大部份客户端&服务端架构的应用程序, ...
- Nginx 启用 https
在nginx.conf中增加新server配置 server { listen ; server_name www.some.com; ssl on; ssl_certificate sslkey/s ...
- Nginx启用ssl以及免费证书申请
主要是这个东西,折腾了我两天,所以记录下来. 最开始是在meteor下面调用一个webservice,但是发现meteor项目的发布环境时https,所以请求的webservice也必须时webser ...
- Nginx启用Gzip压缩js无效的原因
Nginx启用gzip很简单,只需要设置一下配置文件即可完成,可以参考文章Nginx如何配置Gzip压缩功能.不过,在群里常有人提到,他们的网站Gzip压缩虽然成功了,但检测到JS仍然没有压缩成功,这 ...
- Nginx开启http2访问和gzip网页压缩功能
准备工作 如果Nginx要开启http2需要满足以下2个条件: nginx >=1.9.5 openSSL >= 1.0.2 所以这里我们首先要检查Nginx的版本如果没有安装要先安装 ...
随机推荐
- 从零开始写 Docker(二)---优化:使用匿名管道传递参数
本文为从零开始写 Docker 系列第二篇,主要在 mydocker run 命令基础上优化参数传递方式,改为使用 runC 同款的匿名管道传递参数. 如果你对云原生技术充满好奇,想要深入了解更多相关 ...
- contextmanager装饰器
虽然上下文管理器很好用,但定义一个符合协议的管理器对象其实挺麻烦的 得首先创建一个类,然后实现好几个魔法方法.为了简化这部分工作,python 提供了一个非常好用的工具:@contextmanager ...
- 【LeetCode回溯算法#04】组合总和I与组合总和II(单层处理位置去重)
组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target ...
- CT图像重建
20世纪70年代中期,在医学领域出现了一种神奇装置,名为"计算机辅助 X 射线断层成像仪"(简称CAT或CT),它能够在不损伤病人的情况下,提供人体从头到脚各部位的断层X射线图像. ...
- Linux Cheat Sheet
- vscode+gitee+picgo实现稳定图床
目录: 目录 目录: 1. 为什么使用vscode+gitee+picgo实现完美图床 2. 安装VSCode 2.1 安装VSCode软件及相关插件 3. 安装picgo 4. 准备Gitee图床 ...
- Rust 登上了开源头条「GitHub 热点速览」
抱歉!上周因为出月刊工作量比较大,所以「GitHub 热点速递」暂停了一期,必须要给守着更新的读者道个歉,以后每周二的「热点速递」会按时更新,下不为例. 说回本周的热门开源项目,Rust 语言可谓是出 ...
- Java //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数
1 //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数 2 3 int i =1; 4 int sum = 0; 5 int count = 0; 6 for(i = 1;i<=100; ...
- sqlmap 绕过WAF
1.基本的语法 sqlmap 更新 sqlmap -update 具体的使用方法: sqlmap -u url --current-user sqlmap -u url --current-db s ...
- MySQL8.0与5.7版本的下载、安装与配置
•软件下载 下载地址 [官网],点开该网址,点击 DOWNLOAD 来到如下页面: MySQL的版本介绍 MySQL Community Server 社区版本:开源免费,自由下载,但不提供官方技 ...