原文:https://book.2cto.com/201304/19618.htmljavascript
1.5 configure详解 html
能够看出,configure命令相当重要,下文将详细介绍如何使用configure命令,并分析configure究竟是如何工做的,从中咱们也能够看出Nginx的一些设计思想。 java
1.5.1 configure的命令参数 linux
使用help命令能够查看configure包含的参数。 nginx
./configure --help 正则表达式
这里不一一列出help的结果,只是把它的参数分为了四大类型,下面将会详述各种型下全部参数的用法和意义。 算法
1. 路径相关的参数 数据库
表1-2列出了Nginx在编译期、运行期中与路径相关的各类参数。 后端
表1-2 configure支持的路径相关参数
参数名称 意 义 默 认 值
--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日志文件的放置路径。error日志用于定位问题,可输出多种级别(包括debug调试级别)的日志。它的配置很是灵活,能够在nginx.conf里配置为不一样请求的日志并输出到不一样的log文件中。这里是默认的Nginx核心日志路径 <prefix>/logs/error.log
--pid-path=PATH pid文件的存放路径。这个文件里仅以ASC II码存放着Nginx master的进程ID,有了这个进程ID,在使用命令行(例如nginx -s reload)经过读取master进程ID向master进程发送信号时,才能对运行中的Nginx服务产生做用 <prefix>/logs/nginx.pid
--lock-path=PATH lock文件的放置路径 <prefix>/logs/nginx.lock
--builddir=DIR configure执行时与编译期间产生的临时文件放置的目录,包括产生的Makefile、C源文件、目标文件、可执行文件等 <nginx source path>/objs
--with-perl_modules_path=PATH perl module放置的路径。只有使用了第三方的perl module,才须要配置这个路径 无
--with-perl=PATH perl binary放置的路径。若是配置的Nginx会执行Perl脚本,那么就必需要设置此路径 无
--http-log-path=PATH access日志放置的位置。每个HTTP请求在结束时都会记录的访问日志 <prefix>/logs/access.log
--http-client-body-temp-path=PATH 处理HTTP请求时若是请求的包体须要暂时存放到临时磁盘文件中,则把这样的临时文件放置到该路径下 <prefix>/client_body_temp
--http-proxy-temp-path=PATH Nginx做为HTTP反向代理服务器时,上游服务器产生的HTTP包体在须要临时存放到磁盘文件时(详见12.8节),这样的临时文件将放到该路径下 <prefix>/proxy_temp
--http-fastcgi-temp-path=PATH Fastcgi所使用临时文件的放置目录 <prefix>/fastcgi_temp
--http-uwsgi-temp-path=PATH uWSGI所使用临时文件的放置目录 <prefix>/uwsgi_temp
--http-scgi-temp-path=PATH SCGI所使用临时文件的放置目录 <prefix>/scgi_temp 浏览器
2. 编译相关的参数
表1-3列出了编译Nginx时与编译器相关的参数。
表1-3 configure支持的编译相关参数
编译参数 意 义
--with-cc=PATH C编译器的路径
--with-cpp=PATH C预编译器的路径
--with-cc-opt=OPTIONS 若是但愿在Nginx编译期间指定加入一些编译选项,如指定宏或者使用-I加入某些须要包含的目录,这时可使用该参数达成目的
--with-ld-opt=OPTIONS 最终的二进制可执行文件是由编译后生成的目标文件与一些第三方库连接生成的,在执行连接操做时可能会须要指定连接参数,--with-ld-opt就是用于加入连接时的参数。例如,若是咱们但愿将某个库连接到Nginx程序中,须要在这里加入--with-ld-opt=-llibraryName -LlibraryPath,其中libraryName是目标库的名称,libraryPath则是目标库所在的路径
--with-cpu-opt=CPU 指定CPU处理器架构,只能从如下取值中选择:pentium、pentiumpro、pentium三、pentium四、athlon、opteron、sparc3二、sparc6四、ppc64
3. 依赖软件的相关参数
表1-4~表1-8列出了Nginx依赖的经常使用软件支持的参数。
表1-4 PCRE的设置参数
PCRE库的设置参数 意 义
--without-pcre 若是确认Nginx不用解析正则表达式,也就是说,nginx.conf配置文件中不会出现正则表达式,那么可使用这个参数
--with-pcre 强制使用PCRE库
--with-pcre=DIR 指定PCRE库的源码位置,在编译Nginx时会进入该目录编译PCRE源码
--with-pcre-opt=OPTIONS 编译PCRE源码时但愿加入的编译选项
表1-5 OpenSSL的设置参数
OpenSSL库的设置参数 意 义
--with-openssl=DIR 指定OpenSSL库的源码位置,在编译Nginx时会进入该目录编译OpenSSL源码
注意:若是Web服务器支持HTTPS,也就是SSL协议,Nginx要求必须使用OpenSSL。能够访问http://www.openssl.org/免费下载
--with-openssl-opt=OPTIONS 编译OpenSSL源码时但愿加入的编译选项
表1-6 原子库的设置参数
atomic(原子)库的设置参数 意 义
--with-libatomic 强制使用atomic库。atomic库是CPU架构独立的一种原子操做的实现。它支持如下体系架构:x86(包括i386和x86_64)、PPC6四、Sparc64(v9或更高版本)或者安装了GCC 4.1.0及更高版本的架构。14.3节介绍了原子操做在Nginx中的实现
--with-libatomic=DIR atomic库所在的位置
表1-7 散列函数库的设置参数
散列函数库的设置参数 意义
--with-MD5=DIR 指定MD5库的源码位置,在编译Nginx时会进入该目录编译MD5源码
注意:Nginx源码中已经有了MD5算法的实现,若是没有特殊需求,那么彻底可使用Nginx自身实现的MD5算法
--with-MD5-opt=OPTIONS 编译MD5源码时但愿加入的编译选项
---with-MD5-asm 使用MD5的汇编源码
--with-SHA1=DIR 指定SHA1库的源码位置,在编译Nginx时会进入该目录编译SHA1源码。
注意:OpenSSL中已经有了SHA1算法的实现。若是已经安装了OpenSSL,那么彻底可使用OpenSSL实现的SHA1算法
--with-SHA1-opt=OPTIONS 编译SHA1源码时但愿加入的编译选项
--with-SHA1-asm 使用SHA1的汇编源码
表1-8 zlib库的设置参数
zlib库的设置参数 意 义
--with-zlib=DIR 指定zlib库的源码位置,在编译Nginx时会进入该目录编译zlib源码。若是使用了gzip压缩功能,就须要zlib库的支持
--with-zlib-opt=OPTIONS 编译zlib源码时但愿加入的编译选项
--with-zlib-asm=CPU 指定对特定的CPU使用zlib库的汇编优化功能,目前仅支持两种架构:pentium和pentiumpro
4. 模块相关的参数
除了少许核心代码外,Nginx彻底是由各类功能模块组成的。这些模块会根据配置参数决定本身的行为,所以,正确地使用各个模块很是关键。在configure的参数中,咱们把它们分为五大类。
事件模块。
默认即编译进入Nginx的HTTP模块。
默认不会编译进入Nginx的HTTP模块。
邮件代理服务器相关的mail 模块。
其余模块。
(1)事件模块
表1-9中列出了Nginx能够选择哪些事件模块编译到产品中。
表1-9 configure支持的事件模块参数
编译参数 意 义
--with-rtsig_module 使用rtsig module处理事件驱动
默认状况下,Nginx是不安装rtsig module的,即不会把rtsig module编译进最终的Nginx二进制程序中
--with-select_module 使用select module处理事件驱动
select是Linux提供的一种多路复用机制,在epoll调用没有诞生前,例如在Linux 2.4及其以前的内核中,select用于支持服务器提供高并发链接
默认状况下,Nginx是不安装select module的,但若是没有找到其余更好的事件模块,该模块将会被安装
--without-select_module 不安装select module
--with-poll_module 使用poll module处理事件驱动
poll的性能与select相似,在大量并发链接下性能都远不如epoll。默认状况下,Nginx是不安装poll module的
--without-poll_module 不安装poll module
--with-aio_module 使用AIO方式处理事件驱动
注意:这里的aio module只能与FreeBSD操做系统上的kqueue事件处理机制合做,Linux上没法使用
默认状况下是不安装aio module的
(2)默认即编译进入Nginx的HTTP模块
表1-10列出了默认就会编译进Nginx的核心HTTP模块,以及如何把这些HTTP模块从产品中去除。
表1-10 configure中默认编译到Nginx中的HTTP模块参数
默认安装的HTTP 模块 意 义
--without-http_charset_module 不安装http charset module。这个模块能够将服务器发出的HTTP响应重编码
--without-http_gzip_module 不安装http gzip module。在服务器发出的HTTP响应包中,这个模块能够按照配置文件指定的content-type对特定大小的HTTP响应包体执行gzip压缩
--without-http_ssi_module 不安装http ssi module。该模块能够在向用户返回的HTTP响应包体中加入特定的内容,如HTML文件中固定的页头和页尾
--without-http_userid_module 不安装http userid module。这个模块能够经过HTTP请求头部信息里的一些字段认证用户信息,以肯定请求是否合法
--without-http_access_module 不安装http access module。这个模块能够根据IP地址限制可以访问服务器的客户端
--without-http_auth_basic_module 不安装http auth basic module。这个模块能够提供最简单的用户名/密码认证
--without-http_autoindex_module 不安装http autoindex module。该模块提供简单的目录浏览功能
--without-http_geo_module 不安装http geo module。这个模块能够定义一些变量,这些变量的值将与客户端IP地址关联,这样Nginx针对不一样的地区的客户端(根据IP地址判断)返回不同的结果,例如不一样地区显示不一样语言的网页
--without-http_map_module 不安装http map module。这个模块能够创建一个key/value映射表,不一样的key获得相应的value,这样能够针对不一样的URL作特殊处理。例如,返回302重定向响应时,能够指望URL不一样时返回的Location字段也不同
--without-http_split_clients_module 不安装http split client module。该模块会根据客户端的信息,例如IP地址、header头、cookie等,来区分处理
--without-http_referer_module 不安装http referer module。该模块能够根据请求中的referer字段来拒绝请求
--without-http_rewrite_module 不安装http rewrite module。该模块提供HTTP请求在Nginx服务内部的重定向功能,依赖PCRE库
--without-http_proxy_module 不安装http proxy module。该模块提供基本的HTTP反向代理功能
--without-http_fastcgi_module 不安装http fastcgi module。该模块提供FastCGI功能
--without-http_uwsgi_module 不安装http uwsgi module。该模块提供uWSGI功能
--without-http_scgi_module 不安装http scgi module。该模块提供SCGI功能
--without-http_memcached_module 不安装http memcached module。该模块可使得Nginx直接由上游的memcached服务读取数据,并简单地适配成HTTP响应返回给客户端
--without-http_limit_zone_module 不安装http limit zone module。该模块针对某个IP地址限制并发链接数。例如,使Nginx对一个IP地址仅容许一个链接
--without-http_limit_req_module 不安装http limit req module。该模块针对某个IP地址限制并发请求数
--without-http_empty_gif_module 不安装http empty gif module。该模块可使得Nginx在收到无效请求时,马上返回内存中的1×1像素的GIF图片。这种好处在于,对于明显的无效请求不会去试图浪费服务器资源
--without-http_browser_module 不安装http browser module。该模块会根据HTTP请求中的user-agent字段(该字段一般由浏览器填写)来识别浏览器
--without-http_upstream_ip_hash_module 不安装http upstream ip hash module。该模块提供当Nginx与后端server创建链接时,会根据IP作散列运算来决定与后端哪台server通讯,这样能够实现负载均衡
(3)默认不会编译进入Nginx的HTTP模块
表1-11列出了默认不会编译至Nginx中的HTTP模块以及把它们加入产品中的方法。
表1-11 configure中默认不会编译到Nginx中的HTTP模块参数
可选的HTTP 模块 意 义
--with-http_ssl_module 安装http ssl module。该模块使Nginx支持SSL协议,提供HTTPS服务。
注意:该模块的安装依赖于OpenSSL开源软件,即首先应确保已经在以前的参数中配置了OpenSSL
--with-http_realip_module 安装http realip module。该模块能够从客户端请求里的header信息(如X-Real-IP或者X-Forwarded-For)中获取真正的客户端IP地址
--with-http_addition_module 安装http addtion module。该模块能够在返回客户端的HTTP包体头部或者尾部增长内容
--with-http_xslt_module 安装http xslt module。这个模块可使XML格式的数据在发给客户端前加入XSL渲染
注意:这个模块依赖于libxml2和libxslt库,安装它前首先确保上述两个软件已经安装
--with-http_image_filter_module 安装http image_filter module。这个模块将符合配置的图片实时压缩为指定大小(width*height)的缩略图再发送给用户,目前支持JPEG、PNG、GIF格式。
注意:这个模块依赖于开源的libgd库,在安装前确保操做系统已经安装了libgd
--with-http_geoip_module 安装http geoip module。该模块能够依据MaxMind GeoIP的IP地址数据库对客户端的IP地址获得实际的地理位置信息
注意:该库依赖于MaxMind GeoIP的库文件,可访问http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz获取
--with-http_sub_module 安装http sub module。该模块能够在Nginx返回客户端的HTTP响应包中将指定的字符串替换为本身须要的字符串
例如,在HTML的返回中,将</head>替换为</head><script language="javascript" src="$script"></script>
--with-http_dav_module 安装http dav module。这个模块可让Nginx支持Webdav标准,如支持Webdav协议中的PUT、DELETE、COPY、MOVE、MKCOL等请求
--with-http_flv_module 安装http flv module。这个模块能够在向客户端返回响应时,对FLV格式的视频文件在header头作一些处理,使得客户端能够观看、拖动FLV视频
--with-http_mp4_module 安装http mp4 module。该模块使客户端能够观看、拖动MP4视频
--with-http_gzip_static_module 安装http gzip static module。若是采用gzip模块把一些文档进行gzip格式压缩后再返回给客户端,那么对同一个文件每次都会从新压缩,这是比较消耗服务器CPU资源的。gzip static模块能够在作gzip压缩前,先查看相同位置是否有已经作过gzip压缩的.gz文件,若是有,就直接返回。这样就能够预先在服务器上作好文档的压缩,给CPU减负
--with-http_random_index_module 安装http random index module。该模块在客户端访问某个目录时,随机返回该目录下的任意文件
--with-http_secure_link_module 安装http secure link module。该模块提供一种验证请求是否有效的机制。例如,它会验证URL中须要加入的token参数是否属于特定客户端发来的,以及检查时间戳是否过时
--with-http_degradation_module 安装http degradation module。该模块针对一些特殊的系统调用(如sbrk)作一些优化,如直接返回HTTP响应码为204或者444。目前不支持Linux系统
--with-http_stub_status_module 安装http stub status module。该模块可让运行中的Nginx提供性能统计页面,获取相关的并发链接、请求的信息(14.2.1节中简单介绍了该模块的原理)
--with-google_perftools_module 安装google perftools module。该模块提供Google的性能测试工具
(4)邮件代理服务器相关的mail模块
表1-12列出了把邮件模块编译到产品中的参数。
表1-12 configure提供的邮件模块参数
可选的mail 模块 意 义
--with-mail 安装邮件服务器反向代理模块,使Nginx能够反向代理IMAP、POP三、SMTP等协议。该模块默认不安装
--with-mail_ssl_module 安装mail ssl module。该模块可使IMAP、POP三、SMTP等协议基于SSL/TLS协议之上使用。该模块默认不安装并依赖于OpenSSL库
--without-mail_pop3_module 不安装mail pop3 module。在使用--with-mail参数后,pop3 module是默认安装的,以使Nginx支持POP3协议
--without-mail_imap_module 不安装mail imap module。在使用--with-mail参数后,imap module是默认安装的,以使Nginx支持IMAP
--without-mail_smtp_module 不安装mail smtp module。在使用--with-mail参数后,smtp module是默认安装的,以使Nginx支持SMTP
5.其余参数
configure还接收一些其余参数,表1-13中列出了相关参数的说明。
表1-13 configure提供的其余参数其余一些参数 意 义--with-debug 将Nginx须要打印debug调试级别日志的代码编译进Nginx。这样能够在Nginx运行时经过修改配置文件来使其打印调试日志,这对于研究、定位Nginx问题很是有帮助--add-module=PATH 当在Nginx里加入第三方模块时,经过这个参数指定第三方模块的路径。这个参数将在下文如何开发HTTP模块时使用到--without-http 禁用HTTP服务器--without-http-cache 禁用HTTP服务器里的缓存Cache特性--with-file-aio 启用文件的异步I/O功能来处理磁盘文件,这须要Linux内核支持原生的异步I/O--with-ipv6 使Nginx支持IPv6--user=USER 指定Nginx worker进程运行时所属的用户注意:不要将启动worker进程的用户设为root,在worker进程出问题时master进程要具有中止/启动worker进程的能力--group=GROUP 指定Nginx worker进程运行时所属的组