Windows 下从源码编译 Nginx
在制作xServer集成环境Windows版过程中,发现官方编译版组件较少,故自行从源码编译了Nginx,下面为详细步骤。
一、下载如下文件
VS2008 http://download.microsoft.com/download/3/0/2/3025EAE6-2E15-4972-972A-F5B1ED248E85/VS2008ExpressWithSP1CHSX1504735.iso
Perl http://strawberry-perl.googlecode.com/files/strawberry-perl-5.16.3.1-32bit.msi
Mercurial http://mercurial.selenic.com/downloads/
MinGW http://sourceforge.net/projects/mingw/files/latest/download
OpenSSL http://www.openssl.org/source/openssl-1.0.1e.tar.gz
Pcre http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.zip
Zlib http://zlib.net/zlib-1.2.8.tar.gz
subs_filter https://codeload.github.com/yaoweibin/ngx_http_substitutions_filter_module/zip/master
二、编译nginx
1、安装 VS2008、Perl、Mercurial,分别对应C++编译环境、Perl脚本运行时、Hg源码仓库客户端
2、安装MinGW管理器,添加MSYS模块,其他模块可以不安装,用于生成Makefile文件
a、使用 C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link.exe 替换 C:\MinGW\msys\1.0\bin\link.exe
b、编辑 C:\MinGW\msys\1.0\msys.bat 在@echo off下面加入:call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
3、将 OpenSSL、Pcre、Zlib 分别解压到目录 c:\nginx\objs\lib{openssl-1.0.1e,pcre-8.32,zlib-1.2.8} 中
4、检出nginx源码,命令:hg clone --verbose -- http://hg.nginx.org/nginx c:\nginx
a.编辑 c:\nginx\src\core\nginx.h 修改服务器名称
b.替换 c:\nginx\src\os\win32\nginx.ico 自定义软件图标
c.将 subs_filter 解压到 c:\nginx\objs\module\http_subs_filter
编辑文件 ngx_http_subs_filter_module.c,将 ngx_regex_compile_t rc; 移动到当前函数顶部,否则编译出错
5、把下面命令写入到c:\nginx\mkngx,然后在msys中执行该文件
auto/configure --with-cc=cl --builddir=objs --prefix= --sbin-path=nginx.exe --conf-path=conf/nginx.conf \
--pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log \
--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-select_module --with-ipv6 --with-mail \
--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_random_index_module --with-http_secure_link_module \
--with-pcre=objs/lib/pcre-8.32 --with-zlib=objs/lib/zlib-1.2.8 --with-openssl=objs/lib/openssl-1.0.1e \
--with-openssl-opt=enable-tlsext --with-http_ssl_module --with-mail_ssl_module \
--add-module=objs/module/http_subs_filter
mkdir objs/{conf,logs}
nmake -f objs/Makefile
6、执行上述步骤时可能会提示找不到stdin.h文件
编辑 c:\nginx\objs\lib\pcre-8.32\config.h,删除如下内容
#ifndef HAVE_INTTYPES_H
#define HAVE_INTTYPES_H 1
#endif
#ifndef HAVE_STDINT_H
#define HAVE_STDINT_H 1
#endif
编译好的能发我一份吗,带subs_filters的,不想自己build太麻烦
您有编译过好文件么? 要下载的东西 太多了
为什么我在编译完成后,运行nginx.exe一闪而过,就没了。
不仅包括nginx原始代码的编译,而且包括扩展的module的编译。。
非常感谢。。