关于IT运维技术的
最佳实践博客网站

让你的 Nginx启用 HTTP/2

为什么要使用 HTTP/2?

HTTP/2 使数据传输更高效,对你的应用程序更安全。 HTTP/2 相比于 HTTP/1.x 有五个提高性能特点:

  • 完全复用 – 在一个保持激活(keepalive)的连接上,HTTP/1.1 强制按严格的顺序来处理请求。一个请求必须在下一个请求开始前结束。 HTTP/2 消除了这一要求,允许并行和乱序来处理请求。
  • 单一,持久连接 – 由于 HTTP/2 允许请求完全复用,所以可以通过单一连接并行下载网页上的所有对象。在 HTTP/1.x 中,使用多个连接来并行下载资源,从而导致使用底层 TCP 协议效率很低。
  • 二进制编码 – Header 信息使用紧凑的二进制格式发送,而不是纯文本格式,节省了传输字节。
  • Header 压缩 – Headers 使用专用的 HPACK 压缩算法来进行压缩,这进一步降低数据通过网络传输的字节。
  • SSL/TLS 加密 – 在 HTTP/2 中,强制使用 SSL/TLS。在 RFC 中并没有强制,其允许纯文本的 HTTP/2,但是当前所有实现 HTTP/2的 Web 浏览器都只支持加密。 SSL/TLS 可以使你的网站更安全,并且使用 HTTP/2 各项性能会有提升,加密和解密过程的性能损失就减少了。

无缝升级添加ngnx http2模块

cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.6.tar.gz
tar zxvf nginx-1.9.6.tar.gz
cd nginx-1.9.6

#查看原有nginx编译的参数
/usr/local/nginx/sbin/nginx -V

#新增http2模块
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-ld-opt='-ljemalloc' --with-http_v2_module

#编译
make

#备份老的nginx
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

#复制刚才编译的nginx二进制文件
cp objs/nginx /usr/local/nginx/sbin/nginx

#测试
/usr/local/nginx/sbin/nginx -t

#重启nginx
systemctl restart nginx.service

#查看版本
➜  ~  /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.9.6
built by gcc 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-ld-opt=-ljemalloc --with-http_v2_module

2、添加http2配置:

主要:`listen 443 ssl http2`

server {
	listen 443 ssl http2;
        
	ssl on;
        ssl_certificate ssl/www.test.com.crt;
        ssl_certificate_key ssl/www.test.com.key;
        
	ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:10m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	
	ssl_stapling on;
	ssl_stapling_verify on;
	resolver 8.8.4.4 8.8.8.8 valid=300s;
	resolver_timeout 10s;
       
	ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; 
        
	ssl_prefer_server_ciphers on;
        ssl_dhparam ssl/dhparam.pem;
	
	server_name	www.test.com test.com;
	#access_log 	/home/wwwlogs/www.test.com_nginx.log access;
	error_log 	/home/wwwlogs/www.test.com_nginx_error.log error;

	add_header Strict-Transport-Security max-age=63072000;
	add_header X-Frame-Options DENY;
	add_header X-Content-Type-Options nosniff;

	index index.html index.htm index.php;
	include wordpress.conf;
	root /home/wwwroot/www.test.com;

	#error_page 404 /404.html;
	if ( $query_string ~* ".*[\;'\<\>].*" ){
		return 404;
	}
	location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
		valid_referers none blocked *.cnhzz.com www.cnhzz.com cnhzz.com;
		if ($invalid_referer) {
			return 403;
		}
	}
	location ~ .*\.(php|php5)?$  {
		#fastcgi_pass remote_php_ip:9000;
		#fastcgi_pass unix:/var/log/hhvm/sock;
		fastcgi_pass unix:/dev/shm/php-cgi.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
	}
	
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
		expires 30d;
	}

	location ~ .*\.(js|css)?$ {
		expires 7d;
	}
	location /nginx_status {
        	stub_status on;
        	access_log off;
        	#allow 127.0.0.1;
        	#deny all;
   	 }	
}

测试方法:使用 chrome插件:HTTP/2 and SPDY indicator 进行测试,有闪电标示的,都说明已经支持http2了。可想而知网站,普及速度还是非常快的。

http2-test

赞(1)
未经允许不得转载:菜鸟HOW站长 » 让你的 Nginx启用 HTTP/2
分享到: 更多 (0)

留下你的脚印

  订阅  
关注动态