个人网站提升为HTTP2.0协议,加速访问

一、条件

1、openssl的版本必须在1.0.2e及以上

2、nginx的版本必须在1.9.5以上

二、编译安装

1、openssl 编译安装

(1)开始

wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar zxvf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config shared zlib
make && make install
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

注:

(2)查看openssl版本

www@TinywanAliYun: openssl version
OpenSSL 1.0.2j Sep

232

2、重新编译Openresty

(1)本次将下载最新版本:openresty-1.13.6.1.tar.gz

wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar zxvf openresty-1.13.6.1.tar.gz
cd openresty-1.13.6.1/

(2)修改加载openssl 方式

vim /home/www/build/openresty-1.13.6.1/bundle/nginx-1.13./auto/lib/openssl/conf
vim /home/www/build/openresty-1.13.6.1/build/nginx-1.13./auto/lib/openssl/conf

修改后内容,注意:这里是修改为两个不同目录的openssl的配置文件

# 修改前:
#CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
#CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
#CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
#CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a" # 修改前:
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

我这里是直接注释掉,添加新的

(3)重新编译Openresty ,添加–with-openssl参数

./configure \
--user=www \
--group=www \
--prefix=/usr/local/openresty \
--with-luajit \
--with-http_v2_module \
--with-http_realip_module \
--with-http_mp4_module \
--with-stream \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-openssl=/usr/local/ssl \
--with-openssl-opt="enable-tlsext" \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_stub_status_module \
--with-http_xslt_module \
--add-dynamic-module=/home/www/build/nginx-ts-module \
--add-dynamic-module=/home/www/build/nginx-rtmp-module \
--add-dynamic-module=/home/www/build/nginx-module-vts \
--add-module=/home/www/build/ngx_cache_purge-2.3 \
...
...
make

注意:这里只要编译就可以啦,没必要make install (会覆盖原来已经安装好的内容)

(4)修改Nginx 二进制文件,如果Nginx服务正在运行,必须停止,否则无法覆盖

首先备份二进制文件一份:

cp /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.old

覆盖旧二进制文件

cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/nginx  /usr/local/openresty/nginx/sbin/nginx

如果动态编译了其他模块或者同一个模块的不同版本,则同上一并复制过去

cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/ngx_rtmp_module.so /usr/local/openresty/nginx/modules/ngx_rtmp_module.so

cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/ngx_http_ts_module.so /usr/local/openresty/nginx/modules/ngx_http_ts_module.so

cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/ngx_http_vhost_traffic_status_module.so /usr/local/openresty/nginx/modules/ngx_http_vhost_traffic_status_module.so

(5)重启服务,查看配置信息

sudo systemctl start nginx

配置详情

www@TinywanAliYun:~/build/openresty-1.13.6.1/build/nginx-1.13./objs$ sudo /usr/local/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.13.6.1
built by gcc 5.4. (Ubuntu 5.4.-6ubuntu1~16.04.)
built with OpenSSL 1.0.2j Sep
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.
--with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --user=www --group=www --with-http_v2_module --with-http_realip_module
--with-http_mp4_module --with-stream --with-http_ssl_module --with-openssl=/usr/local/ssl
--with-openssl-opt=enable-tlsext --with-http_stub_status_module --with-http_xslt_module
--add-dynamic-module=/home/www/build/nginx-ts-module --add-dynamic-module=/home/www/build/nginx-rtmp-module
--add-dynamic-module=/home/www/build/nginx-module-vts
--add-dynamic-module=/home/www/build/ngx_cache_purge-2.3
--with-stream --with-stream_ssl_module --user=www --group=www --with-http_v2_module
--with-http_ssl_module --with-openssl=/usr/local/ssl --with-openssl-opt=enable-tlsext --with-http_stub_status_module --with-http_xslt_module
--add-dynamic-module=/home/www/build/nginx-ts-module
--add-dynamic-module=/home/www/build/nginx-rtmp-module
--add-dynamic-module=/home/www/build/nginx-module-vts
--add-dynamic-module=/home/www/build/ngx_cache_purge-2.3
--with-stream --with-stream_ssl_module

三、配置Nginx.conf

    server {
listen ssl http2;
server_name www.tinywan.com;
set $root_path /home/www;
root $root_path; ssl on;
ssl_certificate /etc/letsencrypt/live/www.tinywan.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.tinywan.com//privkey.pem;
server_tokens off; location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$ last;
break;
}
}
}

四、测试

1、测试工具,Chrome 的 Net-internals 工具 (Chrome 中通过 chrome://net-internals/#http2 可以访问)

2、测试结果

浏览器Header 请求头变化

五、参考文章

1、HTTP 2.0 详细介绍

3、HTTP协议简介

4、nginx的http2.0性能太逆天了,HTTPS网站性能优化

5、http2.0与http1.X的区别

6、面试时如何优雅的谈论HTTP/1.0/1.1/2.0

7、HTTP/2.0与HTTP/1.1协议区别

8、nginx配置http2无效不起作用

9、[翻译]Dropbox Web 服务启用 HTTP/2:经验和观察

10、如何启用curl命令HTTP2支持

Nginx 学习笔记(二)Web 服务启用 HTTP/2的更多相关文章

  1. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  2. nginx学习笔记二

    一,nginx架构在Linux系统中以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程(多进程的工作方式) master进程 | 信号 | | ---- ...

  3. Nginx学习笔记二基本配置

    1.Nginx的配置文件默认在Nginx程序安装目录的conf二级目录下,主配置文件为nginx.conf.假设您的Nginx安装 在/usr/local/webserver/nginx/目录下,那么 ...

  4. nginx学习笔记(二)

    nginx变量 Nginx 变量值容器的生命期是与当前正在处理的请求绑定的,而与 location 无关. 通过 set 指令隐式创建的 Nginx 变量.这些变量我们一般称为"用户自定义变 ...

  5. dubbo学习笔记二(服务调用)

    项目结构 代码示例 由于之前的IEchoService 的一个方法只是在服务端控制台打印,不便在浏览器测试,所以新添加的方法 api和服务端代码变更 public interface IEchoSer ...

  6. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  7. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  8. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

随机推荐

  1. HTML的input类型为hidden导致无法reset改字段的value问题

    问题关键:根据HTML规范,hidden是非ui类元素,不接受用户处理.所以form的 reset并不影响它. http://stackoverflow.com/questions/6367793/w ...

  2. C语言ODBC数据库操作

    今天我们来介绍一下C语言操作数据库的方法,这里我们使用的是ODBC方式.环境是WIN7+VC6.其他环境也差不多,具体情况具体分析. 首先是环境的配置以及数据源的添加.这里就不去解释了,相关资料网上有 ...

  3. ELK日志框架(1):安装Elasticsearch组建单服务器多节点集群

    ELK简介 最近有个需求搭建一套日志系统用于集成几个业务系统的日志提供快速的检索功能,目前是用Log4net存数据库+Error级别发邮件方式,也算简单暴力好用,但历史日志的模糊查询确实很慢,所以使用 ...

  4. Delphi中根据分类数据生成树形结构的最优方法

    一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...

  5. python之使用smtplib模块发送邮件

    # 使用smtplib模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Heade ...

  6. python 模块之-configparser

    python 模块configparser   配置文件模块 import configparser    config = configparser.ConfigParser() config[&q ...

  7. day14 装饰器

    装饰器 本质上就是函数,功能是为其他函数添加附加功能 原则:不修改被修饰函数的源代码,以及调用方式,即完全不能有任何改变 装饰器 = 高阶函数+ 函数嵌套+ 闭包 高阶函数:函数作为参数或者返回一个函 ...

  8. 自学Linux Shell11.5-执行数字运算

    点击返回 自学Linux命令行与Shell脚本之路 11.5-执行数字运算 1. Shell基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符 ...

  9. 配置远程jupyter notebook

    在远程服务器上启动jupyter notebook,然后在本地进行访问.本文使用最简单的一种方法,无需设置密码,所以这种方法也是最不安全的方法,慎用. 1. 在远程服务器上生成jupyter note ...

  10. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 9: illegal multibyte sequence

    最近对爬虫有点着迷, 在用bs4模块时,遇到报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 9: illeg ...