一、获取 Nginx 源码
可以在 Nginx 官方网站(http:/nginx.org/en/download.html)获取 Nginx 源码包。将下载的ngimx-1.24.0.tar.gz 源码压缩包放置到准备好的 Nginx 源代码目录中,然后解压。
tar -zxvf nginx-1.24.0.tar.gz
二、编译安装Nginx
./configure
make
make install
configure 命令做了大量的“幕后”工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile 文件等。make命令根据configure命令生成的Makefile文件编译Nginx工程,并生成目标文件最终的二进制文件。
make install命令根据configure执行时的参数将Nginx部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制。
三、configure 详解
可以看出,configure命令至关重要,下面将详细介绍如何使用configure命令,并分析configure 到底是如何工作的,从中我们也可以看出Nginx的一些设计思想。
3.1 configure 的命令参数
使用 help命令可以査看 configure 包含的参数。
./configure --help
这里不一一列出 help的结果,只是把它的参数分为了四大类型,下面将会详述各类型下的命令参数:
3.1.1路径参数
参数名称 | 意义 | 默 认 值 |
--prefix=PATH | Nginx安装部署后的根目录 | 默认为/usr/local/nginx目录。注意:这个目标的设置会影响其他参数中的相对目录。例如,如果设置了--sbin-path=sbin/nginx,那么实际上可执行文件会被放到/usr/local/nginx/sbin/nginx中 |
--sbin-path=PATH | 可执行文件的放置路径 | <prefix>/sbin/nginx |
--conf-path=PATH | 配置文件的放置路径 | prefix>/conf/nginx.conf |
-error-log-path=PATH | error日志文件的放置路径。eror日志用于定位问题,可输出多种级别(包括debug调试级别)的日志。它的配置非常灵活,可以在nginx.conf里配置为不同请求的日志并输出到不同的log文件中。这里是默认的Nginx核心日志路径 | prefix>/logs/error.log |
-pid-path=PATH | pid文件的存放路径。这个文件里仅以ASCⅡ码存放着Nginxmaster的进程ID有了这个进程ID,在使用命令行(例如nginx-s reload)通过读取master进程ID向master进程发送信号时,才能对运行中的 Nginx服务产生作用 | <prefix>/logs/nginx.pid |
--lock-path=PATH | lock 文件的放置路径 | prefix>/logs/nginx.lock |
--builddir=DIR | configure 执行时与编译期间产生的临时文件放置的目录,包括产生的MakefileC 源文件、目标文件、可执行文件等 | <nginx source path>/objs |
--with-perl_modules_path=PATH | perl module 放置的路径。只有使用了第三方的perl module,才需要配置这个路径 | 无 |
--with-perl-PATH | perl binary 放置的路径。如果配置的 Nginx会执行Per脚本,那么就必须要设置此路径 | 无 |
--http-log-path=PATH | access日志放置的位置。每一个HTTP请求在结束时都会记录的访问日志 | <prefix>/logs/access.log |
--http-client-body-temp-path=PATH | 处理HTTP请求时如果请求的包体需要暂时存放到临时磁盘文件中,则把这样的临时文件放置到该路径下 | <prefix>/elient_body_temp |
--http-proxy-temp-path=PATH | Nginx作为HTTP反向代理服务器时上游服务器产生的HTTP包体在需要临时存放到磁盘文件时,这样的临时文件将放到该路径下 | <prefix>/proxy_temp |
--http-fastcgi-temp-path=PATH | Fastegi所使用临时文件的放置目录 | <prefix>/fastcgi_temp |
--http-jastcgi-temp-path=PATH | uWSGI所使用临时文件的放置目录 | <preflx>/uwsgi_temp |
--http-scgi-cmp-path=PATH | SCGI所使用临时文件的放置目录 | <prefix>/scgi_temp |
3.1.2编译相关的参数
编译参数 | 意 义 |
--with-cc=PATH | C编译器的路径 |
--wih-cpp=PATH | C预编译器的路径 |
--with-cc-opt=OPTIONS | 如果希望在Nginx编译期间指定加人一些编译选项,如指定宏或者使用加人某些需要包含的目录,这时可以使用该参数达成目的 |
--with-ld-opt=OPTIONS | 最终的二进制可执行文件是由编译后生成的目标文件与一些第三方库链接生成的在执行链接操作时可能会需要指定链接参数,--with-Id-opt就是用于加入链接时的参数。例如,如果我们希望将某个库链接到Nginx程序中,需要在这里加入--wih-ld-opt=libraryName -LlibraryPath,其中libraryName是目标库的名称,libraryPath则是目标库所在的路径 |
--with-cpu-opt=CPU | 指定CPU处理器架构,只能从以下取值中选择:pentium、pentiumpro、pentium3、pentium4、athlon、opteron、sparc32、sparc64、ppc64 |
3.1.3依赖软件的相关参数
PCRE 库的设置参数 | 意 义 |
--without-pcre | 如果确认Nginx不用解析正则表达式,也就是说,nginx.conf配置文件中不会出现正则表达式,那么可以使用这个参数 |
--with-pcre | 强制使用PCRE库 |
--with-pcre=DIR | 指定PCRE库的源码位置,在编译Ngix时会进人该目录编译PCRE源码 |
--with-pcre-opt=OPTIONS | 编译PCRE源码时希望加人的编译选项 |
OpenSSL库的设置参数 | 意 义 |
--with-openssl=DIR | 指定 OpenSSL 库的源码位置,在编译 Nginx时会进人该目录编译 OpenSsL 源码注意:如果Web服务器支持HTTPS,也就是SSL协议,Nginx要求必须使用OpenSSL。可以访间hutp://wwwopenssl.erg免费下载 |
--with-openssl-opt=OPTIONS | 编译 penSSL 源码时希望加入的编译选项 |
atomic(原子)库的设置参数 | 意义 |
--with-libatomic | 强制使用 atomic库。atomic库是CPU架构独立的一种原子操作的实现。它支以下体系架构:x86(包括i386和x86_64)、PPC64、Sparc64(v9或更高版本)卖者安装了GCC4.1.0及更高版本的架构。 |
--with-libatomic-DIR | atomic库所在的位置 |
散列函数库的设置参数 | 意 义 |
--with-MD5=DIR | 指定 MD5 库的源码位置,在编译Nginx时会进人该目录编译MDS源码注意:Nginx源码中已经有了MD5算法的实现,如果没有特殊需求,那么完全可以使用Nginx自身实现的MD5算法 |
--with-MD5-opt=OPTIONS | 编译 MD5 源码时希望加入的编译选项 |
---with-MDS-asm | 使用 MD5 的汇编源码 |
--with-SHA1=DIR | 指定SHA1库的源码位置,在编译Nginx时会进入该目录编译SHA1源码。注意:OpenSSL中已经有了SHA1算法的实现。如果已经安装了OpenSSl那么完全可以使用OpenSSL实现的SHA1算法 |
--with-SHA1-opt=OPTIONS | 编译SHA1源码时希望加入的编译选项 |
--with-SHAl-asm | 使用 SHA1 的汇编源码 |
zlib 库的设置参数 | 意义 |
--with-zlib=DIR | 指定zlib库的源码位置,在编译Nginx时会进入该目录编译zlib源码。如果使用了gzip压缩功能,就需要zlib库的支持 |
--with-zlib-opt=OPTIONS | 编译zlib源码时希望加入的编译选项 |
--with-zlib-asm=CPU | 指定对特定的CPU使用zlib库的汇编优化功能,目前仅支持两种架构:pentium和pentiumpro |
由于模块相关的参数较多,将在下一章详细介绍。