1.前言

最近在优化网站的访问速度,为网站开启http2协议,这个协议有什么优点呢?如下:

  • http2是下一代的传输协议,以后都会普遍用它,是一个趋势。

  • http2有多路复用特性,意思是访问一个域名下面的资源,多个请求共用一条TCP链路,所以比http1.1要快得多。

2.准备工作

  • 需要重新编译openssl1.0.2以上版本,因为我们系统的版本都是centos6的,不支持直接yum更新openssl,如果是centos7,直接yum update openssl -y 即可更新

  • 编译完成openssl后,需要重新使用openssl的库文件重新编译Tenginx,我们使用的Tengine版本是Tengine/2.2.2。

3.操作步骤

  • 安装 openssl-1.0.2t
#进入/usr/local/src,一般软件包都放这里
cd /usr/local/src
#下载安装包
wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz tar -zxvf openssl-1.0.2t.tar.gz cd openssl-1.0.2t ./config shared zlib
#默认安装找/usr/local/ssl
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 -p
#检查openssl版本
openssl version
  • 安装Tenginx
cd /usr/local/src

wget http://tengine.taobao.org/download/tengine-2.2.2.tar.gz

tar tengine-2.2.2.tar.gz

cd tengine-2.2.2
#这里需要修改一下tengine的代码,因为我们是手动编译的openssl,依赖库路径和原来系统安装的不太一样,所以需要手动指定
vim auto/lib/openssl/conf
#在大概32行配置原来配置如下:
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" #先安装一些依赖(我是升级,其实不需要安装依赖了,如果是首次安装tenginx,就需要安装依赖)
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake jemalloc jemalloc-devel
#开始编译tenginx
cd /usr/local/src/tengine-2.2.2 && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_concat_module --with-jemalloc --with-http_v2_module --with-http_secure_link_module --with-openssl=/usr/local/ssl
make
##注意,如果是第一安装tegninx,只需要只需执行以下命令
make install
#但是我是安装过了,所以需要备份老的tenginx
cp -af /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak
cp -af /usr/local/nginx/sbin/dso_tool /usr/local/nginx/sbin/dso_tool_bak
#拷贝编译好的tenginx到对应目录
cp /usr/local/src/tengine-2.2.2/objs/nginx /usr/local/nginx/sbin/
cp /usr/local/src/tengine-2.2.2/objs/dso_tool /usr/local/nginx/sbin/
#然后重启Tenginx,就算编译安装完成啦
  • Tenginx http2配置
#配置http2很简单,如下:
server {
#http 不支持http2的传输协议,所以80端口不变
listen 80
# listen在原https配置文件基础上添加http2
listen 443 ssl http2;
server_name www.oneq.work;
.....
} #另外附上一份完整的支持http2的Tenginx配置 upstream server_backend { server ip:80 weight=10; server ip:80 weight=10; keepalive 800;
#下面检测端口的配置需要Tenginx的才有效,不是Tenginx需要安装额外的插件或者直接注释即可 check interval=5000 rise=3 fall=3 timeout=5000 type=tcp;
} server {
listen 80;
listen 443 ssl http2;
server_name xxx.xxx.xxx; req_status server; ssl_certificate /usr/local/nginx/certs/xxx.xxx.xxx.crt;
ssl_certificate_key /usr/local/nginx/certs/xxx.xxx.xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_http_version 1.1;
access_log logs/access.log main; location / {
proxy_pass http://server_backend/;
access_log logs/server_backend.log main;
} error_page 404 /404.html;
location = /404.html {
root html;
} error_page 500 502 503 504 /50x.html; location = /50x.html {
root html;
}
}

4.效果展示

5.总结

1.第一次安装tenginx和升级步骤有所区别,需要注意下

2.http不支持http2的传输协议,所以80端口还是使用http1.1的协议,https使用http2的传输协议

作者博客 青叶的博客

最新文章

  1. 分布式服务框架dubbo原理解析(转)
  2. SQL: See the TSQL underneath the sp_execute calls
  3. 昂贵的聘礼---poj1062(最短路)
  4. Linux下安装最新的Eclipse
  5. 实现Java JTable的应用案例
  6. ocx在我indows7无法注册
  7. put a ContextMenu into the header of a TabPage z
  8. bzoj1251 序列终结者(Splay Tree+懒惰标记)
  9. echarts如何做出堆积图总计的效果
  10. Log4j源码解析--LoggerRepository和Configurator解析
  11. Hbuilder之开发Python
  12. Ubuntu16.04下Hadoop的本地安装与配置
  13. eclipse中使用workset整理项目
  14. 排序算法----冒泡排序java(写得绝对比其他博文易懂明了实用)
  15. Kafka Topic Api
  16. 51Nod1309 Value of all Permutations 期望
  17. vue中extend/component/mixins/extends的区别
  18. MVC通用控件库展示-MVC4.0+WebAPI+EasyUI+Knockout--SNF快速开发平台3.0
  19. android api doc 一
  20. pyqt5开发环境安装

热门文章

  1. 体验Code::Blocks下的Windows GUI编程(32 bit and 64 bit)
  2. TP5安装workerman版本的坑
  3. MapReduce与Yarn 的详细工作流程分析
  4. web前端之移动端:知识汇
  5. 计算机视觉(二)-opencv之createTrackbar()详解
  6. SpringBootSecurity学习(24)前后端分离版之OAuth2.0 应用登记
  7. 【JZOJ5263】分手是祝愿
  8. git的下载及简单使用一
  9. PHP绕过disable_function限制(一)
  10. Powshell之基础语法