今天本站正式进入HTTP/2
时代,记录一下踩坑过程
据说目前浏览器HTTP/2仅支持全站HTTPS的网站,因为我是全站HTTPS,所以未考证
Nginx
自1.9.5
版本开始提供对HTTP/2
的支持,但一直到我所目前用的最新版(1.11.13
)都没有默认开启用于支持HTTP/2
的http_v2_module
模块,需要自己手动编译,而Windows下的编译非常不方便,搜索了很久踩了很多坑才完成,所以就有了本篇文章。
如果不想自己编译的,本文最后有我已经编译好的nginx.exe
!!!
如果不想自己编译的,本文最后有我已经编译好的nginx.exe
!!!
如果不想自己编译的,本文最后有我已经编译好的nginx.exe
!!!
重要的事情说三遍不多
首先,你需要准备的文件
- 已编译好的
nginx.exe
文件,如果你已经有了,可以直接用你现在用的,或者官网下载: http://nginx.org/en/download.html nginx
源代码,直接点左边的gz即可下载,官方下载地址: http://hg.nginx.org/nginxVisual Studio
,我用的2015版本,没有的可以去MSDN I TELL YOU
下载,地址:http://www.itellyou.cn/ 在开发人员工具里面,保险起见版本最好大于等于2010MSYS
安装步骤后面会提,地址 https://sourceforge.net/projects/mingw/files/Installer/NASM
点击最新版,进入Win64
,下载安装文件,右键以管理员身份安装 http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 并在系统变量中添加安装位置,例如C:\Program Files (x86)\NASM
Perl
我下的ActiveState Perl版本,据说没区别,安装时会自动将其加入系统环境变量,那个勾可别取消了 https://www.perl.org/get.htmlopenssl
源码,最新版即可,我下的openssl-1.1.0e.tar.gz
https://www.openssl.org/source/pcre
我下的版本是pcre-8.40.tar.gz
,这里注意不要下成了pcre2,编译时会提示缺少文件,别问我怎么知道的。。。 https://ftp.pcre.org/pub/pcre/zlib
我下的版本zlib-1.2.11.tar.gz
官网地址: http://www.zlib.net/
如果你这些东西都下完了,嗯,很强
现在讲一下,MSYS
的安装方法
双击mingw-get-setup.exe
后,点击Install
后面默认即可,这只是个安装器,还要下载文件,最后会安装一个MinGW Installer
,打开它
依次选择左侧Basic Setup
,右侧msys-base
,上方Installation
,点击Apply Changes
,等待msys
安装完毕
在合适位置解压nginx源码,我就放在桌面了,方便删,在nginx根目录下创建build文件夹,然后在build下创建lib这个文件夹,然后解压openssl、pcer、zlib
这三个文件到lib
文件夹下,如下所示
下面这一步重要了,在你已编译好的nginx目录下,打开命令提示符,输入nginx -V
(V是大写,注意空格),完整复制如下所示这一段
粘贴到合适位置,这里要修改几处地方,开头的configure arguments:
改成auto/configure
,builddir=
后面改成build
,--with-pcre=
后面的objs.msvc8
改成build
,也就是build/lib/pcre-8.40
,同样的还有openssl、zlib
,注意版本号要和你下的版本对应,末尾加上 --with-http_v2_module
(注意–前的空格)
下面是我的配置,供参考
auto/configure --with-cc=cl --builddir=build --with-debug --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=build/lib/pcre-8.40 --with-zlib=build/lib/zlib-1.2.11 --with-select_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-mail --with-stream --with-openssl=build/lib/openssl-1.1.0e --with-openssl-opt=no-asm --with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module --with-http_v2_module
然后打开你msys的安装目录(我的是C:\MinGW\msys\1.0),运行mysys.bat
,输入cd C:/Users/He/Desktop/nginx
(你的nginx源码所在目录),将上面的配置粘贴进去,回车,会在build
下生成Makefile
文件
接着打开你Visual Studio的开发人员命令提示(不同版本名字不同)
先输入c:
,再输入cd C:\Users\He\Desktop\nginx
,接着输入nmake -f build/Makefile
然后就等待编译完成,如果不出意外的话编译完成后会提示找不到sed文件,不过无影响,如果想解决可以参照http://m.blog.csdn.net/article/details?id=51981794这篇文章
接着备份一下已编译目录里的nginx.exe文件,将源码目录下build文件夹内的nginx.exe复制进去,命令提示符输入nginx -V
,如果末尾有–with-http_v2_module则成功
最后在nginx.conf
的listen 443 ssl
后面加上http2
即可
如何测试开启成功?用chrome浏览器打开你的网站,在新TAB
中打开chrome://net-internals/#http2
若果在你网站对应那一行的Protocol Negotiated
下为h2
,则说明HTTP/2
开启成功
或者使用 curl –http2 -I https://www.strawtc.cn 命令测试
这里有一个HTTP/2对比HTTP/1的网站https://http2.akamai.com/demo,可为什么我测出来的HTTP/2速度还要慢一些。。。。
我已经编译好的nginx.exe下载 点我
参考文章: http://www.tuicool.com/articles/F77NvaQ
http://m.blog.csdn.net/article/details?id=51981794
http://blog.csdn.net/huangyimo/article/details/50717326
http://www.linuxidc.com/Linux/2017-01/139466.htm
题主,我目前使用的nginx是1.11.5版本,是否可以帮我编译一个?
不好意思,我现在也没有这套环境了