新版本的Nginx已经官方支持HTTP/2了,也就是以前PageSpeedMod的升级版。启用HTTP/2能有效进行减少网站连接数等优化,从而极大加快网站载入速度。下面将编译的过程记录下来,以供日后参考。
编译并升级Nginx
编译过程相对于以前的PageSpeed来说差不多,但是配置文件方面似乎少了很多(毕竟是官方支持而非第三方模块)。
如果以前添加有SPDY模块,记得在编译选项中去掉,Nginx配置文件中也去掉,根据报错信息来操作即可
# Install basic dependencies # 安装依赖包 apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip # Update Nginx 升级Nginx # check http://nginx.org/ for latest version 从http://nginx.org/获取最新版本 NGINX_VERSION=1.9.5 wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz tar zxf nginx-${NGINX_VERSION}.tar.gz cd nginx-${NGINX_VERSION}/ # "Nginx -V" to check all the configure arguments, copy all the things behind "configure arguments:" here and add "--with-http_v2_module" # "Nginx -V" 查看原有Nginx编译参数,将"configure arguments:"后面的复制到这里并添加 "--with-http_v2_module",因为包含有文件,日志等路径信息,不要简单复制粘贴 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6 --with-http_v2_module #生成可执行文件 make # Backup old nginx and replace it with new one, restart nginx 备份旧Nginx,替换成新的并重启。注意检查你自己的Nginx路径并修改 service nginx stop; mv /usr/sbin/nginx /usr/sbin/nginx.old; cp ~/nginx-${NGINX_VERSION}/objs/nginx /usr/sbin/; service nginx restart
编译Nginx过程中可能遇到的问题
- ./configure: error: the HTTP rewrite module requires the PCRE library.
原因及解决办法: 缺少PCRE库,用下列语句安装库后解决问题
apt-get install libpcre3 libpcre3-dev
- ./configure: error: SSL modules require the OpenSSL library.
原因及解决办法: 缺少SSL库,用下列语句安装库后解决问题
apt-get install openssl libssl-dev
修改Nginx文件启用HTTP/2
修改Nginx配置文件,在监听443端口后增加http2字样
原来的配置文件:
# Old config line listen 443 ssl;
增加http2后变成这样:
# Modified config line, adding "http2" listen 443 ssl http2;
重启Nginx
service nginx restart
打开chrome浏览器输入此地址检查启用是否成功: chrome://net-internals/#http2
参考资料
- Build ngx_pagespeed From Source
- 编译Nginx增加HTTP/2支持:https://shanjie.me/2015/10/15/升级Nginx-加入对HTTP2的支持/
- Nginx 开始支持 HTTP/2 了:https://imququ.com/post/nginx-http2-patch.html
- Mozilla推荐服务端SSL配置生成器:https://mozilla.github.io/server-side-tls/ssl-config-generator/
7 thoughts on “编译Nginx新版本增加HTTP/2支持”
同一个 IP 下,有 HTTPS 网站和非 HTTPS 网站
非 HTTPS 网站www.a.com 的 Nginx 配置里没有写监听 443 端口,但是手动输入 https://www.a.com 会能访问,并且弹出提示证书不安全,因为证书是来自 http://www.b.com 的,请问这个要如何处理?
看到您以前遇到过这样的问题,所以专门来贵站找你了。。哈哈哈。不知如何解决 ?谢谢!
只能签一个证书给a站点跳转到80端口,因为当时大家给出的结论就是想要不弹出错误提示,只能让客户顺利访问443端口绑定的a.com这个域名。顺利访问443端口的a域名的前提只能是签证书,没什么好办法…… 好在现在签证书免费还方便(几句命令,整个过程不超过10分钟)
Thanks for your reply !
嗯,我也是这么想的。但是,对我来说不可行。
现在的问题就是我做的是代理,没有管理员邮箱,无法操作源站,所以证书是签不到的。
为了不弹出那个安全提示框,能直接拒绝访问么,或者return 掉么?
折腾了一天,我还是没有找到好的办法,anyway ,thank you !
我暂时没有好的办法,除非单独设置ip,443端口不放任何站点不让访问,不然一访问就会弹出证书错误提示。
谢谢!
这应该是 nginx 的一个问题了,没有配置https ,却可以使用其他站点的证书,不知道出于什么原因这样设计的。
无论如何,非常感谢,我现在主要做http2,希望以后可以多多交流!
我只是业余研究一下,欢迎多多指教
重新研究了一下,好像老外有解决办法,但是我自己测试没有成功,麻烦你测试一下分享一下结果:Nginx. How do I reject request to unlisted ssl virtual server?