说明蓝色=命令名称

      浅绿=命令参数

      浅蓝=选项

      紫色=目录

      系统环境:CentOS  5.7 i686

nginx作为现在比较热门的web服务软件,很多人都在用,本人也用了快两年了,最近朋友问了我几个关于nginx编译的问题,问的我哑口无言,特测试了一下得出了一些小结论发表出来和大家一起探讨。

朋友问的问题:

1)、nginx 编译时都需要哪些参数 2)、nginx 默认编译(不加任何 --with 和--with-out )有哪些功能 3)nginx 默认用的什么io接口

测试之旅(先从第二个问题开始,第一个见后文总结):

问题二    分别编译5次nginx 编译参数如下:

a: ./configure --prefix=/usr/local/nginx_01 --user=www --group=www

b: ./configure --prefix=/usr/local/nginx_02 --user=www --group=www --with-http_ssl_module
c: ./configure --prefix=/usr/local/nginx_03 --user=www --group=www --with-poll_module --with-http_ssl_module
d: ./configure
--prefix=/usr/local/nginx_04 --user=www --group=www --without-http_ssi_module

编译安装后查看nginx 的大小如图:nginx编译及参数详解_nginx参数详解

分析: 默认参数大小为 655K,添加一个--with (--with-http_ssl_module)  大小为 701K > 655K ,添加两个--with(--with-poll_module --with-http_ssl_module ) 大小为 704 > 701K,添加--without-http_ssi_module  大小为 642K < 655K

结论:带有 --with-out 的参数为nginx默认编译所带的功能(个别除外如: --without-poll_module 、--without-select_module),带有 --with的参数 是需要手动添加的功能。

问题三  编译安装nginx 参数如下:

f:./configure --prefix=/usr/local/nginx_06 --user=www --group=www --with-select_module --with-poll_module

g:./configure --prefix=/usr/local/nginx_07 --user=www --group=www --without-select_module  --without-poll_module

安装完毕后产看nginx_01,nginx_06,nginx_07配置文件中events{}段的内容如下:

nginx编译及参数详解_nginx_02

分三次启动nginx_01,nginx_06,nginx_07 并追踪查看如图:

nginx编译及参数详解_nginx默认支持模块_03 

注:三个结果都是epoll,此只列出一个。

分别在nginx_01,nginx_06,nginx_07  的 events{}段中加入 " use poll; " : sed -i '/events/a use poll;' /usr/local/nginx_0[167]/conf/nginx.conf

nginx编译及参数详解_nginx_04

启动nginx_01 : /usr/local/nginx_01/sbin/nginx  无法启动结果如图:

nginx编译及参数详解_休闲_05

启动nginx_06: /usr/local/nginx_06/sbin/nginx  正常启动,strace结果如图:

nginx编译及参数详解_nginx_06

启动nginx_07 : /usr/local/nginx_07/sbin/nginx  无法启动结果如图: nginx编译及参数详解_nginx编译_07

查看nginx_01,nginx_06,nginx_07  三个的/sbin/nginx大小:

nginx编译及参数详解_nginx参数详解_08

结论nginx默认安装不修改配置文件io接口为 epoll ,若用其他io接口需在编译时加入 --with 参数,nginx默认安装与加( --without-select_module  --without-poll_module )等参数时一样,不支持其他io接口。

补充:nginx参数详解

./configure --help
--help 显示本提示信息
--prefix=PATH 设定安装目录
--sbin-path=PATH 设定程序文件目录
--conf-path=PATH 设定配置文件(nginx.conf)目录
--error-log-path=PATH 设定错误日志目录
--pid-path=PATH 设定pid文件(nginx.pid)目录
--lock-path=PATH 设定lock文件(nginx.lock)目录
--user=USER 设定程序运行的用户环境(www)
--group=GROUP 设定程序运行的组环境(www)
--builddir=DIR 设定程序编译目录
--with-rtsig_module 允许rtsig模块
--with-select_module 允许select模块(一种轮询模式,不推荐用在高载环境)
--without-select_module 不使用select模块
--with-poll_module 允许poll模块(一种轮询模式,不推荐用在高载环境)
--without-poll_module 不使用poll模块
--with-http_ssl_module 允许ngx_http_ssl_module模块(Apache对应:mod_ssl)
--with-http_realip_module 允许ngx_http_realip_module模块(mod_rpaf)
--with-http_addition_module 允许ngx_http_addition_module模块(mod_layout)
--with-http_xslt_module 允许ngx_http_xslt_module模块
--with-http_sub_module 允许ngx_http_sub_module模块
--with-http_dav_module 允许ngx_http_dav_module模块(mod_dav)
--with-http_flv_module 允许ngx_http_flv_module模块(mod_flvx)
--with-http_gzip_static_module 允许ngx_http_gzip_static_module模块(mod_dflate)
--with-http_random_index_module 允许ngx_http_random_index_module模块(mod_autoindex)
--with-http_stub_status_module 允许ngx_http_stub_status_module模块(mod_status)
--without-http_charset_module 不使用ngx_http_charset_module模块
--without-http_gzip_module 不使用ngx_http_gzip_module模块
--without-http_ssi_module 不使用ngx_http_ssi_module模块
--without-http_userid_module 不使用ngx_http_userid_module模块
--without-http_access_module 不使用ngx_http_access_module模块
--without-http_auth_basic_module 不使用ngx_http_auth_basic_module模块
--without-http_autoindex_module 不使用ngx_http_autoindex_module模块
--without-http_geo_module 不使用ngx_http_geo_module模块
--without-http_map_module 不使用ngx_http_map_module模块
--without-http_referer_module 不使用ngx_http_referer_module模块
--without-http_rewrite_module 不使用ngx_http_rewrite_module模块
--without-http_proxy_module 不使用ngx_http_proxy_module模块
--without-http_fastcgi_module 不使用ngx_http_fastcgi_module模块
--without-http_memcached_module 不使用ngx_http_memcached_module模块
--without-http_limit_zone_module 不使用ngx_http_limit_zone_module模块
--without-http_empty_gif_module 不使用ngx_http_empty_gif_module模块
--without-http_browser_module 不使用ngx_http_browser_module模块
--without-http_upstream_ip_hash_module 不使用ngx_http_upstream_ip_hash_module模块
--with-http_perl_module 允许ngx_http_perl_module模块
--with-perl_modules_path=PATH 设置perl模块路径
--with-perl=PATH 设置perl库文件路径
--http-log-path=PATH 设置access log文件路径
--http-client-body-temp-path=PATH 设置客户端请求临时文件路径
--http-proxy-temp-path=PATH 设置http proxy临时文件路径
--http-fastcgi-temp-path=PATH 设置http fastcgi临时文件路径
--without-http 不使用HTTP server功能
--with-mail 允许POP3/IMAP4/SMTP代理模块
--with-mail_ssl_module 允许ngx_mail_ssl_module模块
--without-mail_pop3_module 不允许ngx_mail_pop3_module模块
--without-mail_imap_module 不允许ngx_mail_imap_module模块
--without-mail_smtp_module 不允许ngx_mail_smtp_module模块
--with-google_perftools_module 允许ngx_google_perftools_module模块(调试用)
--with-cpp_test_module 允许ngx_cpp_test_module模块
--add-module=PATH 允许使用外部模块,以及路径
--with-cc=PATH 设置C编译器路径
--with-cpp=PATH 设置C预处理路径
--with-cc-opt=OPTIONS 设置C编译器参数
--with-ld-opt=OPTIONS 设置连接文件参数
--with-cpu-opt=CPU 为指定CPU优化,可选参数有:
          pentium, pentiumpro, pentium3, pentium4,
          athlon, opteron, sparc32, sparc64, ppc64
--without-pcre 不使用pcre库文件
--with-pcre=DIR 设定PCRE库路径
--with-pcre-opt=OPTIONS 设置PCRE运行参数
--with-md5=DIR 设定md5库文件路径
--with-md5-opt=OPTIONS 设置md5运行参数
--with-md5-asm 使用md5源文件编译
--with-sha1=DIR 设定sha1库文件路径
--with-sha1-opt=OPTIONS 设置sha1运行参数
--with-sha1-asm 使用sha1源文件编译
--with-zlib=DIR 设定zlib库文件路径
--with-zlib-opt=OPTIONS 设置zlib运行参数
--with-zlib-asm=CPU 使zlib对特定的CPU进行优化,可选参数:
          pentium, pentiumpro
--with-openssl=DIR 设定OpenSSL库文件路径
--with-openssl-opt=OPTIONS 设置OpenSSL运行参数
--with-debug 允许调试日志

 

nginx编译时不是功能加的越多越好,应该尽可能少编译模块,不用的最好不要加入。个模块功能参考《实战Nginx_取代Apache的高性能Web服务器》。

结束语:本测试只是个人推论猜想,非官方结论,欢迎大牛指点。

编译好的nginx可通过 /usr/local/nginx/sbin/nginx -V 查看编译时的参数(具体路径更具实际情况而定)