编译Nginx新版本增加HTTP/2支持

新版本的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

参考资料

天毅

Linux/php菜鸟,喜欢修修补补,喜欢分享,喜欢写博客,其实主要是喜欢找速度快的国外空间(剁手癌晚期,买VPS完全停不下来)...

7 thoughts to “编译Nginx新版本增加HTTP/2支持”

  1. 同一个 IP 下,有 HTTPS 网站和非 HTTPS 网站
    非 HTTPS 网站www.a.com 的 Nginx 配置里没有写监听 443 端口,但是手动输入 https://www.a.com 会能访问,并且弹出提示证书不安全,因为证书是来自 www.b.com 的,请问这个要如何处理?
    看到您以前遇到过这样的问题,所以专门来贵站找你了。。哈哈哈。不知如何解决 ?谢谢!

    1. 只能签一个证书给a站点跳转到80端口,因为当时大家给出的结论就是想要不弹出错误提示,只能让客户顺利访问443端口绑定的a.com这个域名。顺利访问443端口的a域名的前提只能是签证书,没什么好办法…… 好在现在签证书免费还方便(几句命令,整个过程不超过10分钟)

      1. Thanks for your reply !
        嗯,我也是这么想的。但是,对我来说不可行。
        现在的问题就是我做的是代理,没有管理员邮箱,无法操作源站,所以证书是签不到的。
        为了不弹出那个安全提示框,能直接拒绝访问么,或者return 掉么?
        折腾了一天,我还是没有找到好的办法,anyway ,thank you !

          1. 谢谢!
            这应该是 nginx 的一个问题了,没有配置https ,却可以使用其他站点的证书,不知道出于什么原因这样设计的。
            无论如何,非常感谢,我现在主要做http2,希望以后可以多多交流!

发表评论

电子邮件地址不会被公开。 必填项已用*标注