终于搞定了在Win上编译安装Nginx了,现在就卡到了添加模块上

moster 7个月前 463

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,可安装ActivePerlStrawberry Perl
  • 安装Mercurial客户端
  • 下载PCREzlibOpenSSL(可选)的源码安装包

如果觉得上面PCRE和OpenSSL这两个源码包在官网下载太慢的话,可以尝试以下网址去下载:

下载openssl请到http://distfiles.macports.org/openssl/
下载PCRE请到https://ftp.pcre.org/pub/pcre/

虽然官网把要安装的软件都罗列出来了,但是安装过程也并不是一番风顺的,经过我的折腾,需要注意以下事项:

  • 安装VS后,需要设置环境变量,要不然刚开始编译就开始错,首先把VS里安装目录下的这两个BAT文件vsvars32.batvcvarsall.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的帮我一把。

第1条附言·6个月前
0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论

目前共有 2 条回复

kukou
kukou 7个月前

上次我自己也折腾一段时间,出了好多错,放着放着就忘记了,没想到今天看到楼主成功跨出一步了,层主对VS也不熟悉!

moster
moster 7个月前

@affagm 是的,VS安装的确太烦了,我安装的VS2017,编译就报文中错误,主要安装的时候你不知道哪些是必须安装的,哪些是不需要安装的,全安装的话,又是漫长的等待,而且有些就根本用不着,无端占用硬盘空间,并且编译Nginx的时候感觉真正用到的功能好像就是nmake,其他都是调用库,如果有懂的哥们指点一下就好了