终于搞定了在Win上编译安装Nginx了,现在就卡到了添加模块上
Win版的Nginx不能再进行编译添加模块,这是最烦的事情,我要扩展功能的时候,就没办法根据自己的需要去添加模块,比如我要添加echo
模块就没办法,因为Win上的Nginx是已经编译好了的,如果要在Win实现添加模块的话,只能自己下载Nginx源码自行编译安装了,不过也有难题,因为没有人会在Win上折腾安装Nginx的编译,太麻烦了,所以在网上根本搜索不到在Win上编译安装Nginx的教程,幸好Nginx官网上留有一篇关于在Win上安装Nginx的教程,有此参考,就要少走了太少弯路啦!
Windows上安装Nginx的官网参考网址:Building nginx on the Win32 platform with Visual C
编译安装Nginx前的准备工作
根据官网上的教程,我们知道要在Windows平台上安装Nginx,需要先安装以下软件:
- Microsoft Visual C compiler,只要安装Microsoft Visual Studio就OK了
- 安装MSYS,至于MSYS是什么和干嘛用的,可以自行wiki
- 若你的Nginx需要有SSL的支持,那你还需要安装Perl,可安装ActivePerl或Strawberry Perl
- 安装Mercurial客户端
- 下载PCRE、zlib和OpenSSL(可选)的源码安装包
如果觉得上面PCRE和OpenSSL这两个源码包在官网下载太慢的话,可以尝试以下网址去下载:
下载openssl请到http://distfiles.macports.org/openssl/
下载PCRE请到https://ftp.pcre.org/pub/pcre/
虽然官网把要安装的软件都罗列出来了,但是安装过程也并不是一番风顺的,经过我的折腾,需要注意以下事项:
- 安装VS后,需要设置环境变量,要不然刚开始编译就开始错,首先把VS里安装目录下的这两个BAT文件
vsvars32.bat
和vcvarsall.bat
拖到CMD里运行,不晓得的可以用搜索功能将这两个文件搜索出来,运行后环境变量变设置好了;当然你也可以手动设置,参考网址:VS环境变量设置 - PCRE请下载pcre-8系列,不要下载pcre2系列,要不然根本就无法编译过
- 三个PCRE、zlib和OpenSSL的时候,请下载
.tar.gz
结尾的源码包,不要下载.zip
的压缩包 - 记得将Perl, Mercurial和MSYS的
bin
目录添加到环境变量中,不过安装过程中勾选可自动加入环境变量中
开始编译安装Nginx
以上准备工作就这样完成了,现在就要开始进行编译安装Nginx了。
1、打开MSYS的bash命令窗口
2、用下面的命令从hg.nginx.org网站上下载Nginx的源码
$ hg clone http://hg.nginx.org/nginx
3、在Nginx的源码目录中新建objs/lib
两层目录,并把PCRE/zlib/openssl的源码解压到lib目录下
注意:不过我下载的时候打开是本来就有的,不用再新建了,没有就请自建
$ mkdir objs
$ mkdir objs/lib
$ cd objs/lib
$ tar -xzf ../../pcre-8.42.tar.gz
$ tar -xzf ../../zlib-1.2.11.tar.gz
$ tar -xzf ../../openssl-1.1.1b.tar.gz
4、运行下面的配置脚本,等着结束,只要不报错,就是好消息,并且Nginx和objs目录下会生成Makefile文件
注意:运行以下配置脚本的时候,请先修改你自己的PCRE/zlib/openssl三个软件解压后的实际目录
$ auto/configure \
--with-cc=cl --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=objs/lib/pcre-8.43 \
--with-zlib=objs/lib/zlib-1.2.11 --with-openssl=objs/lib/openssl-1.0.2r \
--with-openssl-opt=no-asm --with-http_ssl_module
5、编译生成Nginx应用程序,如果一路不报错,就会在objs目录下生成nginx.exe应用程序了
$ nmake
到这里,我的Nginx应用程序生成了,但是当我要添加模块的时候,就一直提示“预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它”这个错误,添加模块就跟在Linux上一样,只是重复步骤4就行了,编译的时候可以用nmake -f objs/Makefile
即可。由于我对VS不熟悉,现在还没有找到解决办法,网上也搜索不到真正有帮助的文档,希望看到的朋友有懂VS的帮我一把。
本文使用到的参考资料:
目前共有 2 条回复