阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Windows下编译Nginx超详细教程

137次阅读
没有评论

共计 3721 个字符,预计需要花费 10 分钟才能阅读完成。

Nginx 在 Linux 下表现不用多说,在 Windows 下 Nginx 的表现还欠佳,但在 Web 应用性能整体要求不高的情况下,把 Nginx 作为一个反向和少量请求逻辑处理的应用还是很方便的。

网络上介绍的文章不少包括 nginx 的官网也有介绍,但是介绍都比较简单对于一些细节并没有提到,所以我把我摸索的一些经验写下来,希望可以帮助到正在找资料到人。

默认的 nginx 已经包含了很多通用的模块,详见:http://nginx.org/en/docs/
但是如果需要增加一些第三方的模块的话(比如淘宝的 combo 模块:https://github.com/alibaba/nginx-http-concat)则需要下载 nginx 的源码并加入新的模块重新编译。下面我就来介绍下如何在 windows 下编译 nginx 并添加 combo 模块的。

需要准备的工具:

  • visual studio 2013 2015 都可以
  • 下载 MSYS,地址:https://sourceforge.net/projects/mingw/files/Installer/ 下载 mingw-get-setup.exe
  • 安装 perl,ActivePerl 和 Strawberry Perl 都可以
  • Mercurial 安装包(一个源码管理器:水银)https://www.mercurial-scm.org/
    -PCRE,zlib 和 OpenSSL 这三个 nginx 需要的依赖模块(笔者用的版本是:pcre-8.37,zlib-1.2.8,openssl-1.0.1s,需要注意的是 openssl 如果版本太高的话编译会报错,所以下载 openssl 的需要注意在官方地址的 old 目录中找到对应的版本)

0. 安装 MSYS

下载 mingw-get-setup.exe 直接执行直接下一步即可,安装完成之后找到文件 bin/mingw-get.exe 打开,用这个来安装 msys 点击左侧的 Basic Setup 右侧选择 mingw32-base 和 msys.base 只有点击菜单 isntallation-》Apply Changes 开始下载,完成之后点击左侧 All Packages-》MSYS-》MSY Base System 检查右侧菜单的选中组件中是否有 msys-make、msys-tar 因为这两个组件会在接下来用到。

1. 下载 nginx 源码和依赖模块

首先安装 Mercurial 并在环境变量中添加 C:\Program Files\Mercurial\ 目录,因为我们需要在命令行中使用 hg 命令来获取 nginx 的源码。

hg clone http://hg.nginx.org/nginx

下载到本地,需要注意的是不知道是不是我的网络问题下载过程很不稳定,如果不成功多试几次!
下载 nginx 的依赖模块就放到 nginx 源码的同级目录中,包括 combo 的源码:

nginx
lib
---openssl-1.0.1s.tar.gz
---pcre-8.37.tar.gz
---zlib-1.2.8.tar.gz
---nginx-http-concat

2. 解压依赖组件包下载

在 nginx 目录中新建 build 文件夹做为我们编译目录,并在 build 中新增 lib 存放依赖包解压目录。

nginx
---build
------lib

打开 MSYS 安装目录下的 msys.bat 命令行工具,cd 到 nginx/build/lib 目录下执行:

tar -xzf ../../lib/openssl-1.0.1s.tar.gz
tar -xzf ../../lib/pcre-8.37.tar.gz
tar -xf ../../lib/zlib-1.2.8.tar.gz 

zlib 下载了后好像不是 gzip 格式的所以不能用 - z 参数,combo 模块因为是源码直接拷贝到 nginx/build/lib 下即可
目前目录呈现这样子:

nginx
---build
------lib
---------openssl-1.0.1s
---------pcre-8.37
---------zlib-1.2.8
---------nginx-http-concat

3. 配置 nginx 生成 Makefile 文件

如果打包的系统是 x64 的话需要在生成 Makefile 之前把 openssl 模块的配置修改为 x64 的,到 nginx/build/lib/openssl-1.0.1s 目录下,找到 INSTALL.W64 文件, 用编辑器打开,找到类似如下文字:

To build for Win64/x64:

 > perl Configure VC-WIN64A
 > ms\do_win64a
 > nmake -f ms\ntdll.mak
 > cd out32dll
 > ..\ms\test

在 cmd 命令行中 cd 到目录下分别执行前两句:

 > perl Configure VC-WIN64A
 > ms\do_win64a

执行成功即可。
接下来。。。

启动 msys.bat 并 cd 到 nginx 源码目录下执行:

auto/configure --with-cc=cl --builddir=build --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 \
--with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=build/lib/pcre-8.37 \
--with-zlib=build/lib/zlib-1.2.8 --with-openssl=build/lib/openssl-1.0.1s \
--with-select_module --with-http_ssl_module --with-ipv6 \
--with-http_sub_module \
--add-module=build/lib/nginx-http-concat

执行完毕之后在 build 目录下会生成一堆文件,其中 Makefile 就是我们生成的编译批处理文件了。

接下来继续执行命令:

nmake -f build/Makefile

但是这次我们不能用 msys.bat 来执行了,因为编译过程中代码会引用到很多系统自带库如果不在一个命名空间是无法引用的。
我们用 visual studio 的命令行工具来执行(快捷方式在 windows 全部程序 visual studio 目录中)。
开始执行等待大概几分钟,如果没有意外就成功了,我在编译时最后提示找不到引用 sed 我看了一下是 mingw 中的引用文件,但是不用管他我们在 build 下的 nginx.exe 已经编译成功了。

OK,我们 cd 到 build 目录下执行 nginx 试试看吧!
好了,介绍 window 编译 nginx 的内容就介绍到这里,我自己尝试的时候遇到很多问题基本上就是一步一个坑摸索出来的,网上的资料也不是很全面,我想如果我们能写下来应该是可以帮助很多人的吧。

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

Ubuntu 16.04 LTS 上安装 Nginx、MariaDB 和 HHVM 运行 WordPress http://www.linuxidc.com/Linux/2016-10/136435.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Linux(RHEL7.0)下安装 Nginx-1.10.2 http://www.linuxidc.com/Linux/2016-10/136484.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139466.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3721字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中