美文网首页程序员
Http2.0在nginx上实践

Http2.0在nginx上实践

作者: 木中木 | 来源:发表于2017-02-16 19:07 被阅读0次

今天,在nginx上面实践http2.0,为什么强调nginx,因为目前nginx在前端请求中扮演一个中间调配、转发的角色,大多数网站都有架设nginx。

http2的优点可以参见http2.0博客上讲述。这里就不在重复,这里着重讲解一下nginx上操作实践,目前nginx从1.9.5开始支持了,浏览器谷歌40、firefox36都开始支持,IE8暂时还没有支持,只不过比较幸运的是,不支持的浏览器会自动转为http1.1请求。nginx的windows版本目前还没有集成http2的组件,需要我们通过visual studio重新生产exe。linux环境下的安装过程如下:

1.在开始我们的任务之前,请先下载 OpenSSL pcre ZlibNginx源码 ,并且全部解压到同一个目录,假设为nginx-http2/nginxsource ,这时候的代码结构如下:

2.准备好各种安装包之后,要解压 tar zxvf *,然后进入这个目录

# 先进入nginx源码目录

cd nginx-http2/nginxsource/nginx-1.9.14

# 配置Nginx源码

# --prefix:配置nginx最终安装目录,可以修改为你想要的目录

# --with-http_ssl_module 跟 --with-http_v2_module 必带,因为 HTTP2.0采用 HTTPS ,HTTPS 基于 SSL/TLS

sudo ./configure --prefix=/home/kingdom/env/nginx-http2/nginx-http2 --with-http_ssl_module --with-pcre=../pcre-8.38--with-openssl=../openssl-1.0.2g--with-zlib=../zlib-1.2.8--with-http_v2_module

> 输入管理员密码然后回车

>make&&makeinstall

这样就安装完成了

3.生成SSL/TLS安全证书

要配置HTTP 2.0就需要启动HTTPS,那就需要生成一个SSL/TLS证书,而OpenSSL正好可以做这件事情,买不起证书但自己造一个来临时用还是可以的,直接执行下面命令:

# 切换到nginx的根目录(我这里是home/kingdom/env/nginx-http2/nginx-http2,请根据上一步编译时候指定的--prefix对应修改)

cd home/kingdom/env/nginx-http2/nginx-http2

cd conf

# 利用openssl命令生成公钥跟密钥

openssl genrsa -des3 -passout pass:x -outcert.pass.key2048

openssl rsa -passin pass:x -incert.pass.key-outcert.key

openssl req -new-keycert.key-outcert.csr

openssl x509 -req -days365-incert.csr -signkey server.key-outcert.crt

# 将crt跟key合并生成pem文件

cat cert.crt cert.key> cert.pem

# 删除掉我们不需要用到的文件

rm -rf cert.crt cert.csr

4.修改Nginx配置

server {

      listen      7104;

      server_name  localhost;

      location / {

          root  html;

          index  index.html index.htm;

          #return 301 https://$host$remote_port$request_uri;

}

        error_page  500 502 503 504  /50x.html;

      location = /50x.html {

      root  html;

    }

}

server {

listen 443 ssl http2 default_server;

server_name  localhost;

ssl_certificate      cert.pem;

ssl_certificate_key  cert.key;

ssl_session_cache    shared:SSL:1m;

ssl_session_timeout  5m;

# 我用原始的下面这段启动报错了,所以注释掉改用了后面那段

#ssl_ciphers  HIGH:!aNULL:!MD5;

ssl_ciphers 'CHACHA20:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;';

ssl_prefer_server_ciphers  on;

location / {

root  html;

index  index.html index.htm;

}

}

这里我们设置了两种端口,一个是https的默认端口443,一个是http的端口7104,之所以这样设置就是为了后面比较两者的效率

5.性能比较

这里我们使用一个简单的例子来完成比较,一个简单的index页面,加载500张图片的效率,如下图所示

看下请求速度:

http2.0

http1.1

可以看出两者时间上面差了近两秒,当然这里仅仅是通过img的src进行加载的,如果有ajax请求的请情况,我们可以通过chrome自带的检测工具,如下图,http://192.168.14.183:7104/请求数已经到达6个,这是ajax将会被阻塞,而http2,至始至终只有一个请求数,可以实现无阻塞。

如何识别http2呢?

在chrome的请求信息中我们可以看出,如下图,这些都是http2特有的标示。

这里要注意的一点,在配置nginx,conf中https的配置后,一定要ps -ef|grep nginx 来查看进程数,然后kill -9 ;杀掉进程,之后在启动nginx,这里的nginx -s reload 是不起作用的。

相关文章

  • Http2.0在nginx上实践

    今天,在nginx上面实践http2.0,为什么强调nginx,因为目前nginx在前端请求中扮演一个中间调配、转...

  • nginx配置Http2.0

    最近关注http2.0,然后想在在网站配置http2.0如下是配置和遇到的问题 使用server是基于nginx得...

  • Http Https SPDY

    HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事 HTTP2.0的奇妙日常 淘宝全站HTTPS实践...

  • 网络优化

    最近对网络优化进行了一些研究,好些都没有去实践,所以做一个整理,以后慢慢研究 HTTP2.0 HTTP2.0新特性...

  • iOS网络深度优化总结

    最近对网络优化进行了一些研究,好些都没有去实践,所以做一个整理,以后慢慢研究 HTTP2.0 HTTP2.0新特性...

  • Nginx配置HTTP2.0

    Http2.0已经发布很久了,其优点前篇文章已经介绍过了HTTP2-0原理解析,今天我们来配置Nginx使其支持H...

  • HTTP2.0

    HTTP2.0 标签(空格分隔): HTTP2.0 HTTP2.0 核心变化:二进制分帧 在应用层(HTTP2.0...

  • 深入理解http2.0协议,看这篇就够了

    http2.0协议简介 什么是http2.0协议? 在http2.0官网 的描述是: 中文总结一下就是: 对1.x...

  • Http/2.0

    导读 http2.0是一种安全高效的下一代http传输协议。安全是因为http2.0建立在https协议的基础上,...

  • 网络相关

    Mars 微信终端跨平台组件 Mars 正式开源! 关于 iOS HTTP2.0 的一次学习实践 AFNetwor...

网友评论

    本文标题:Http2.0在nginx上实践

    本文链接:https://www.haomeiwen.com/subject/qcphwttx.html