1. 概述

2. 在Windows上编译

  • 准备(zlib、pcre、openssl可以统一放在objs/libs下面,后面的执行的configure脚本文件可以指定目录)

    • nginx源码:

    • perl环境:安装ActivePerl或者Strawberry Perl,ssl环境,自行下载 64位 or 32 位
    • zlib:ssl相关,库函数,比如用1.2.11
    • PCRE:ssl相关,库函数,比如用8.42,下载地址
    • OpenSSL:版本不要太高,否则可能出错,比如用1.0.1s
    • MSYS(GNU环境)
      • 可以用MinGW去下载,然后运行msys.bat。下载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因为这两个组件会在接下来用到。
      • 也可以去Sourceforge下载,或者用msys2
    • Visual Studio,会用到其VS2012 x86 Native Tools Command Prompt工具
  • 创建编译命令集
    • 在Nginx根目录下,创建build.bat
    • 在build.bat中执行configure时,要指定编译根目录--prefix=D:/tmp/nginx-release-1.14.2/objs \(也可以直接改configure文件的NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx})
    • 内容为(不同版本nginx的configure文件--shell脚本文件,位置不同:有的在根目录有的在auto目录下;注意修改依赖的库的路径;官网demo上的命令略有不同):
configure \
--with-cc=cl \
--with-debug \
--prefix=D:/tmp/nginx-1.12.2/objs \
--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.42 \
--with-zlib=objs/lib/zlib-1.2.11 \
--with-openssl=objs/lib/openssl-OpenSSL_1_0_1s \
--with-openssl-opt=no-asm \
--with-select_module \
--with-http_ssl_module
  • 生成MakeFile资源(Makefile及其他文件)

    • 运行MSYS(安装完成后,自动在桌面有快捷方式)切换到Nginx根目录(linux风格的路径,如/d/tmp/xxx),执行以下命令:build.bat
    • 如果使用MinGW装的GNU环境,那么可以运行msys.bat
  • 编译Nginx源码(过程1分半钟)
    • 运行VS命令行(比如VS2012为其目录下的VS2012 x86 Native Tools Command Prompt,也可能是x64的),切换到Nginx根目录,执行以下命令:nmake -f objs/Makefile
  • 编译完成后,objs目录下会生成nginx.exe

3. 可能遇到的问题

  • 'sed' is not recognized as an internal or external command,

    • 编译源码时发生,貌似无关紧要,sed.exe也是mingw下面的一个程序,可以加到环境变量中:C:\MinGW\msys\1.0\bin
  • 运行生成的nginx.exe会报错:NMAKE : fatal error U1073: don't know how to make 'src/os/win32/ngx_win32_config.h'
    • 有时下载的源码包的/src/os下面没有win32目录及文件
    • GitHub上面有
    • 不行把其他版本呢上的拷过来了,比如1.14.2
  • The system cannot find the path specified(可能是error.log、conf/nginx.conf、temp/client_body_temp等)
    • 需要手动在编译目录(objs)下面创建logs、temp、tmp、conf文件夹,并在conf文件夹中放一个可用的nginx.conf文件(如果用到了mime type,可能还要拷贝一个mime.types进来,当然还要建一个html文件夹并放入默认页面)

Nginx源码编译的更多相关文章

  1. Nginx源码编译安装选项

    [Nginx源码编译过程] make是用来编译的,它从Makefile中读取指令,然后编译. make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置. configu ...

  2. nginx源码编译以及源码编译过程中遇到的问题

    本文主要讲nginx安装以及安装过程中遇到的问题. 谈到nginx 必须聊聊它的起源和发展. nginx是由俄罗斯工程师Igor Sysoev 用C语言开发的一个免费开源的Web服务器软件,于2004 ...

  3. (原)nginx 源码编译

    要在nginx上开发,所以先了解下这个是干嘛的..百度一下很多 编译源码需要的组件 1.zlib 2.pcre 3.openssl 使用ubuntu的话.可以直接使用 sudo apt-get ins ...

  4. nginx 源码编译 用OPENSSL源码 开启 SSL

    ./configure --prefix=/usr/local/nginx --with-openssl=/home/uniqs/thirdparty/openssl/openssl-1.1.1d - ...

  5. nginx源码编译安装(详解)

    nginx编译安装 安装步骤: 官网下载合适的版本,建议选择稳定版本. 官网地址:https://nginx.org wget https://nginx.org/download/nginx-1.2 ...

  6. nginx源码编译安装

    安装编译所需的包: [root@xaiofan ~]# yum install -y gcc gcc-c++ autoconf automake 安装nginx使用某些功能需要的包: [root@xa ...

  7. centos 下nginx源码编译安装

    1.下载nginx 进入nginx官网下载nginx的稳定版本,我下载的是1.10.3. 下载:wget http://nginx.org/download/nginx-1.10.3.tar.gz 解 ...

  8. nginx源码编译问题

    [root@localhost nginx-1.7.4]# ./configure checking for OS + Linux 2.6.32-431.el6.x86_64 x86_64 check ...

  9. 【运维技术】Nginx安装教程(yum安装,源码编译)

    安装方式 yum直接更新源安装 源码直接编译之后安装 使用yum进行直接安装 Installing a Prebuilt CentOS/RHEL Package from an OS Reposito ...

随机推荐

  1. redis 开发与运维 学习心得1

    主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...

  2. StringUtils.hasText()

    StringUtils.hasText(字符串) 如果字符串里面的值为null, "", "   ",那么返回值为false:否则为true

  3. Elasticsearch-PHP 索引操作

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

  4. 【BZOJ3998】弦论 【后缀自动机】

    题意 给定一个长度为n的字符串,求他的第k小子串是什么. 分析 T=0的时候,这个题跟SPOJ-SUBLEX的做法一样,当T=1的时候,不同位置的子串算多个,那么初始化的时候d[u]=cnt[u],没 ...

  5. 第二话:javascript中闭包的理解

    闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...

  6. "分辨率"到底是个什么概念?它和DPI之间是什么关系?

    "分辨率"到底是个什么概念?它和DPI之间是什么关系? 分辨率:显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.由于屏幕上的点.线和面都是由像素组成的, ...

  7. SUSE Linux--zypper程序包管理(实战命令总结)

    (1)zypper ar iso:/?iso=/media/SOFTWARE/openSUSE-11.4-DVD-i586.iso DVDISO 新添加本地iso文件为安装源,名称和别名均为DVDIS ...

  8. spring.net事件的注入

    .c#代码 TestObject source = new TestObject(); TestEventHandler eventListener1 = new TestEventHandler() ...

  9. input框添加阴影效果

    .input:hover,.input:focus{ border:1px solid #85afe1; -webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0 ...

  10. JSTL详解实例

    JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的.在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定 ...