Win10 64位操作系统中编译nginx

参考如下信息

  • http://nginx.org/en/docs/windows.html
  • http://nginx.org/en/docs/howto_build_on_win32.html
  • https://blog.csdn.net/pi314pi/article/details/81167814

环境准备

  • 已安装VS2010的Win10电脑一台
  • 安装ActivePerl。这个是为了编译openssl
  • 安装msys2

源码下载

  • nginx源码:nginx-8acaa1161783.tar.gz。
    1. 一定不能是在http://nginx.org/en/download.html这里下载的源码,否则编译不过。需要到http://hg.nginx.org/nginx这里去下载
  • openssl-1.0.2p.tar.gz
    1. 据说OpenSSL要使用1.0.xx版本的,1.1的版本编译不过的。我没有验证过1.1版本
  • pcre-8.38.tar.gz
  • zlib-1.2.11.tar.gz

编译环境部署

  • 打开msys2, 等msys2初始化完成后,会在msys2的统计目录中多出来一个opt的文件夹,将下载的源码都复制到该目录
  • 在msys2的终端中切换路径的/opt,就能查看到源码
cd /opt && ls
  • 解压缩源码
 tar -zxvf nginx-8acaa1161783.tar.gz && tar -zxvf openssl-1.0.2p.tar.gz && tar -zxvf pcre-8.38.tar.gz && tar -zxvf zlib-1.2.11.tar.gz
  • 修改代码结构,将依赖的源码都移动到nginx-8acaa1161783/objs/lib目录
cd nginx-8acaa1161783/ && mkdir -p objs/lib && mv ../openssl-1.0.2p ../pcre-8.38 ../zlib-1.2.11 ./objs/lib

开始编译

  • 执行configure,这一步路径是关键,我这里是假设我最终会在D:\nginx下运行我的nginx程序,如果不想放在D:\nginx下,也可以根据情况去修改路径。但一定不是/opt,/usr/local这一类的linux路径格式
    1. 运行的时候出现了auto/cc/msvc: line 117: [: : integer expression expected的错误信息,看了一下auto/cc/msvc的文件,应该是版本判断时出错了,将如下原文修改为,并重新执行一下configure的命令
	# 修改前
    # MSVC 2005 supports C99 variadic macros
    if [ "$ngx_msvc_ver" -ge 14 ]; then
        have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
    fi
	# 修改后
    # MSVC 2005 supports C99 variadic macros
    # if [ "$ngx_msvc_ver" -ge 14 ]; then
        have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
    # fi
auto/configure \
    --with-cc=cl \
    --with-debug \
    --prefix=D:/nginx \
    --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=D:/nginx/temp/client_body_temp \
    --http-proxy-temp-path=D:/nginx/temp/proxy_temp \
    --http-fastcgi-temp-path=D:/nginx/temp/fastcgi_temp \
    --http-scgi-temp-path=D:/nginx/temp/scgi_temp \
    --http-uwsgi-temp-path=D:/nginx/temp/uwsgi_temp \
    --with-cc-opt=-DFD_SETSIZE=1024 \
    --with-pcre=./objs/lib/pcre-8.38 \
    --with-zlib=./objs/lib/zlib-1.2.11 \
    --with-openssl=./objs/lib/openssl-1.0.2p \
    --with-openssl-opt=no-asm \
    --with-select_module \
    --with-http_ssl_module
  • 修改openssl的编译参数,使其支持64位编译器
    1. 打开.\auto\lib\openssl\makefile.msvc文件
      1. 找到“VC-WIN32”替换为“VC-WIN64A”;
      2. “if exist ms\do_ms.bat”替换为“if exist ms\do_win64a.bat”;
      3. “ms\do_ms”替换为“ms\do_win64a”。
  • 修改nginx-8acaa1161783/objs/Makefile中的CFLAGS字段,去掉-W4 -WX的编译选项,添加-W3的编译选项
  • 启动Visual Studio x64 Win64命令提示框,将路径切换到nginx-8acaa1161783。然后直接输入nmake进行编译。
    1. 编译完成之后会有一个与sed相关的报错,不用管他就可以了,我们已经编译完了。

部署

  • 去http://nginx.org/en/download.html上下载一个可直接运行的Windos版本的nginx
  • 将下载完的包解压到D盘,并修改目录的名字为nginx
  • 删除D:\nginx中的nginx.exe,使用我们新编译的nginx.exe代替
  • 按照http://nginx.org/en/docs/windows.html中的方法启动nginx即可

你可能感兴趣的:(nginx)