nginx升级到支持HTTP2.0的方法示例

一、前言

最近想折腾一下服务器,升级到http2.0。

然后nginx照着官网配置了一下

    # ssl写在443端口后面。这样http和https的链接都可以用
    listen 443 ssl http2 default_server;
    server_name chat.chengxinsong.cn;

  # HSTS的合理使用,max-age表明HSTS在浏览器中的缓存时间,includeSubdomainscam参数指定应该在所有子域上启用HSTS,preload参数表示预加载,通过Strict-Transport-Security: max-age=0将缓存设置为0可以撤销HSTS
  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

  ssl_certificate   /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.pem;
    ssl_certificate_key /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.key;

  # 分配20MB的共享内存缓存,不同工作进程共享TLS会话信息
  # ssl_session_cache shared:SSL:20m;

  # 设置会话缓存过期时间1h
  ssl_session_timeout 60m;

  # TLS协议的合理配置
  # 指定TLS协议的版本,不安全的SSL2和SSL3要废弃掉
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  # 启用ssl_prefer_server_ciphers,用来告诉Nginx在TLS握手时启用服务器算法优先,由服务器选择适配算法而不是客户端
  ssl_prefer_server_ciphers on;

  # 优先选择支持前向加密的算法,且按照性能的优先顺序排列
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

  # 会话恢复的合理使用
  # 配置会话票证,减少了TLS握手的开销
  ssl_session_tickets on;

然后执行检查nginx配置。nginx -t

意思就是说,http2.0缺少ngx_http_v2_module。nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了。

二、查资料找原因

出现上面原因是nginx从1.9.5开始,已经用 http_v2_module 模块替换了 ngx_http_spdy_module ,并正式开始支持http2协议。

但是我的nginx是1.12.2。应该不是ngin版本问题

注意事项:

1、并且需要openssl库的版本在1.0.2以上编译。1.要开启HTTP/2协议支持,需要在nginx 1.10以上版本并且需要openssl库的版本在1.0.2以上编译。

2.http2.0只支持开启了https的网站。

可能是服务器的openssl库的版本,发现是1.0.2。

所以还是要升级到更高点。

三、升级OpenSSL

在http2.0协议中,涉及到ALPN(Application Layer Protocol Negotiation,应用层协议协商)的支持,目前所有主流的Unix服务器系统中内置的OpenSSL库都低于1.0.2版本。通过使用OpenSSL的命令行工具,可以检查当前的http2服务是否支持ALPN。

找一个安装目录

1、下载最新版的OpenSSL库编译安装

wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config --prefix=/usr/local/openssl
make && make install

2.替换旧版本库

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#链接新库文件
ln -s /usr/local/openssl/lib/libssl.so /usr/local/lib64/libssl.so
ln -s /usr/local/openssl/lib/libcrypto.so /usr/local/lib64/libcrypto.so
#检查更新后的openssl依赖库是否是1.1.0f
strings /usr/local/lib64/libssl.so | grep OpenSSL
#显示结果表明已升级到最新版本链接库
OpenSSL 1.1.0f 25 May 2017

#配置openssl库文件的搜索路径
echo '/usr/local/openssl/lib' >> /etc/ld.so.conf
#使修改后的搜索路径生效
ldconfig -v
#查看openssl版本,结果显示升级成功
openssl version
OpenSSL 1.1.0f 25 May 2017

四、nginx开启ssl模块

默认编译的 Nginx 并不包含 h2 模块,我们需要加入参数来编译,截止发文,Nginx 1.9 开发版及以上版本源码需要自己加入编译参数,从软件源仓库下载的则默认编译。 Nginx 是不再支持 SPDY。

如果你编译的 Nginx 不支持,那么在 ./configure 中加入:--with-http_v2_module ,如果没有 SSL 支持,还需要加入 --with-http_ssl_module

1、找到源码包,查看configure中是否支持http2

这时候需要去下载的时候的源码文件夹中找到这个configure。注意:不是编译之后的文件夹。

在"./configure"配置中,"--with"表示启用模块,也就是说这些模块在编译时不会自动构建"--without"表示禁用模块,也就是说这些模块在编译时会自动构建,若你想Nginx轻量级运行,可以去除一些不必要的模块。

执行./configure --help

从上图知道了nginx在编译时不会自动构建http_ssl_module和http_v2_module。所以需要重新编译nginx。

2、加入参数编译

我们的新配置信息就应该这样写:

./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=/home/soft/openssl-1.1.0f

上面的/usr/local/nginx这个路径是我们编译之后的包路径。

那么在 ./configure 中加入:--with-http_v2_module ,如果没有 SSL 支持,还需要加入 --with-http_ssl_module,加上刚才更新的openssl到1.1.0,所以需要加上--with-openssl=/home/soft/openssl-1.1.0f。

运行上面的命令即可,等配置完

配置完成后,运行命令

make

这里不要进行make install,否则就是覆盖安装

3、备份和替换

(1)然后备份原有已安装好的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_07_22.bak

(2)关闭nginx,然后将刚刚编译好的nginx覆盖掉原有的nginx

关闭nginx

./nginx -s quit

移动编译好的nginx到原有的nginx

cp ./objs/nginx /usr/local/nginx/sbin/

(3)启动nginx

./nginx
稍等1分钟作用,然后就可以看到http2.0的效果。

五、查看网站是否是http2.0

右键name,勾选protocol,这样就可以看到http协议。

上图截图网站地址:https://chat.chengxinsong.cn

对比一下http1.1的网站

上图截图网站地址:https://www.mwcxs.top

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 升级nginx以支持http2的方法

    本文介绍了升级nginx以支持http2的方法,分享给大家,具体如下: 一键升级脚本 https://github.com/whisshe/upHttp2.git HTTP/2 的优势 相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化: HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式.二进制格式在协议的解析和优化扩展上带来更多的优势和可能. HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量.而 HTTP/1.x 每

  • Nginx 配置反向代理使用 Google fonts 字体并开启 HTTP2/SSL 支持

    由于博客主题使用了 Google fonts PT Serif 字体,国内只能通过中科大的代理来使用 Google fonts 字体.然而最近发现其速度不稳定,响应时间有时候甚至超过 600ms.刚好因为自己有 vultr 的 VPS(带小尾巴) 就自己动手搭了个来用 VPS 环境如下: Ubuntu 14.04 Nginx 1.12.0 (最新版各别配置与之前不一样) Openssl 1.0.2j (新版 Nginx 开启 http2 需要的最低 openssl 版本) 重新编译安装 Ngin

  • Nginx/Openresty中启用http2支持的方法教程

    本文主要给大家介绍了关于Nginx/Openresty启用http2支持的相关内容,在开始介绍之前,我们先来看一看什么是http2. 以下摘自http2的介绍: HTTP/2 源自 SPDY/2 SPDY 系列协议由谷歌开发,于 2009 年公开.它的设计目标是降低 50% 的页面加载时间.当下很多著名的互联网公司,例如百度.淘宝.UPYUN 都在自己的网站或 APP 中采用了 SPDY 系列协议(当前最新版本是 SPDY/3.1),因为它对性能的提升是显而易见的.主流的浏览器(谷歌.火狐.Op

  • nginx升级到支持HTTP2.0的方法示例

    一.前言 最近想折腾一下服务器,升级到http2.0. 然后nginx照着官网配置了一下 # ssl写在443端口后面.这样http和https的链接都可以用 listen 443 ssl http2 default_server; server_name chat.chengxinsong.cn; # HSTS的合理使用,max-age表明HSTS在浏览器中的缓存时间,includeSubdomainscam参数指定应该在所有子域上启用HSTS,preload参数表示预加载,通过Strict-

  • nginx部署多个vue项目的方法示例

    上一篇已经介绍了然后配置web项目:今天由于公司需求,需要在同一域名端口下,部署两个项目:今天花了一上午终于弄好了,选择赶紧做一个笔记. 如何连接阿里云服务器就不在这里说了,请看我以前的文章. 首先需要的效果 http://47.97.244.83/login http://47.97.244.83/student/login 文件目录 两个项目并列在同一文件夹内. 准备好两个vue的项目 http://47.97.244.83/login:这个不用修改配置直接build就可以.关键是二级域名的

  • Docker 部署 Mysql8.0的方法示例

    1. 参照官网,安装docker 2.拉取mysql镜像 (默认拉取最新的镜像)8.0.11 docker pull mysql 3.在宿主机创建持久化 mysql data 及mysql.cnf mkdir /usr/local/mysqlData/test/cnf mkdir /usr/local/mysqlData/test/data vi /usr/loal/mysqlData/test/cnf/mysql.cnf 设置本地文件共享: Docker -> Preferences... -

  • VisualStudio2019配置OpenCV4.5.0的方法示例

    一.下载安装OpenCV4.5.0 1.进入opencv官网 2.点击Release进入Release界面,选择Windows版本 3.读秒完成即可开始下载,建议使用迅雷下载,比较快!!! 4.双击安装包进行安装 安装正在进行 安装完打开文件夹是这样的    其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV官方为我们提供的一些demo示例源码 二.配置环境变量   把OpenCV文件夹放好地方后,依次选择计算机->属性->高级系统设置->系统变量,

  • MySQL 4.0 升级到mysql 5.0的方法

    一.从 4.0 到 4.1 的主要变化 如果在4.1.0到4.1.3版本的MySQL中创建了包含 TIMESTAMP 字段的 InnoDB表.则在升级到4.1.4及更高时需要重建表,因为存储格式发生变化了 字符串根据标准SQL来比较:比较之前不删除末尾的空格,以前用末尾空格扩展了比较短的字符串.现在的结果是'a' > 'a\t',以前则不这样.可以用 mysqlcheck 来检查一下数据表 TIMESTAMP 返回 'YYYY-MM-DD HH:MM:SS' 格式的字符串.在MySQL 4.0中

  • nginx 配置跨域失效修复的方法示例

    nginx 配置跨域不生效 如下配置 server { listen 80; server_name localhost; # 接口转发 location /api/ { # 允许请求地址跨域 * 做为通配符 add_header 'Access-Control-Allow-Origin' '*'; # 设置请求方法跨域 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; # 设置是否允许 co

  • Nginx中配置用户服务器访问认证的方法示例

    Nginx超级强大它可以单独为一个域名设置用户认证,方法也很简单我们只要生成用户认证的用户名和密码,然后再Nginx添加auth认证配置即可. Nginx可以为某一个域名单独加用户认证,具体做法如下: 1. 生成用户认证的用户名和密码: #wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 根据提示输入: 用户名: 密码: 文件名: 脚本会自动生成认证文件,auth.conf内容如下: /usr/local/nginx/con

  • Nginx 运维之域名验证的方法示例

    各公众平台在配置接口域名时会验证开发者对域名的配置权, 生成随机的文本及字符串,让放置在域名根目录可以通过域名直接访问到即通过验证. 示例为验证域名 abc.com 可以通过根路由访问 6CysNYj8Hb.txt 响应体为字符串 01df2ddab4774ba2676a5563ccb79ffa. $ curl https://abc.com/6CysNYj8Hb.txt 01df2ddab4774ba2676a5563ccb79ffa 方案一 配置有 root 的 server,直接把随机文档

  • Springcloud Config支持本地配置文件的方法示例

    背景: Springcloud项目使用Springcloud-config作为分布式配置,配置参数都放在config里,不同的环境有不同的问题: 项目本地: boostrap.yml 远程配置: application.yml application-local.yml application-dev.yml application-test.yml application-prod.yml 其中application-local.yml是本地开发环境,由于开发时,经常修改配置,就会频繁去修改c

随机推荐