Nginx 常用编译参数说明及扩展模块介绍

模块介绍

--with-debug

默认未启用

使用场景:开启调试模式,可用于配置文件修改立即生效,不需要重启Nginx

--with-http_ssl_module

默认未启用

使用场景:HTTP SSL 使用场景

--with-http_realip_module

默认未启用

使用场景:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP

set_real_ip_from  10.10.10.10;
real_ip_header    X-Forwarded-For;

set_real_ip_from 指令是告诉nginx,10.10.10.10是我们的反向代理服务器(信任服务器,记住这个名词,下面会提到),不是真实的用户IP,real_ip_header 则是告诉nginx真正的用户IP是存在X-Forwarded-For请求头中

real_ip_recursive 用来控制多组反向代理服务器的情况

--with-http_addition_module

默认未启用

使用场景:用于向HTTP正文响应的头部尾部增加内容

location / {
    add_before_body /before_action;
    add_after_body  /after_action;
}

--with-http_sub_module

默认未启用

使用场景:用于替换HTTP正文响应的内容

location / {
    sub_filter '<a href="http://127.0.0.1:8080/'  '<a href="https://$host/';
    sub_filter '<img src="http://127.0.0.1:8080/' '<img src="https://$host/';
    sub_filter_once on;
}

--with-http_secure_link_module

默认未启用

使用场景:安全链接模块,比如用于多长时间失效的下载连接

--with-http_stub_status_module

默认未启用

使用场景:输出Nginx状态信息,用于监控场景

location /basic_status {
    stub_status;
}

--with-http_gunzip_module

默认未启用

使用场景:为不支持gzip解压缩的客户端,提供gunzip功能,比如数据为了节省磁盘空间,已经gzip压缩,但需要提供给手机客户端。

location /storage/ {
    gunzip on;
}

--with-http_image_filter_module

默认未启用

使用场景:提供了一些图片的过滤算法,依赖GD库

location /img/ {
    proxy_pass   http://backend;
    image_filter resize 150 100;
    image_filter rotate 90;
    error_page   415 = /empty;
}

--with-http_flv_module --with-http_mp4_module

默认未开启

使用场景:视频相关,mp4,flv

第三方模块

ngx_devel_kit

https://github.com/simpl/ngx_devel_kit/

ngx_devel_kit 模块是一个拓展 Nginx 服务器核心功能的模块,第三方模块开发可以基于它来快速实现。它提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。
开发者如果要依赖这个模块做开发,需要将这个模块一并参与编译,同时需要在自己的模块配置中声明所需要使用的特性。

lua-nginx-module

https://github.com/openresty/lua-nginx-module/

nginx_lua_module 是 Nginx 第三方模块,它能将 Lua 语言嵌入到nginx配置中,从而使用 Lua 就极大增强了 Nginx 的处理能力。

建议使用LuaJIT作为Lua解析器

echo-nginx-module

https://github.com/openresty/echo-nginx-module

echo-nginx-module 允许你使用在Nginx配置文件中使用"echo", "sleep", "time", "exec"等指令。

ngx_set_misc

https://github.com/openresty/set-misc-nginx-module

ngx_set_misc 允许你直接对uri进行escape,unescape,md5等操作

redis

Nginx 1.7.7 with Lua 编译参数参考

# 安装LuaJit
wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz 
tar xvzf LuaJIT-2.0.3.tar.gz
make 
make install 

export LUAJIT_LIB=/usr/local/lib 
export LUAJIT_INC=/usr/local/include/luajit-2.0/ 


# lua redis parse
t
gmake CC=gcc LUA_INCLUDE_DIR=/usr/local/include/luajit-2.0/
gmake install CC=gcc
# 而 Mac 下需要
make LDFLAGS='-bundle -undefined dynamic_lookup' CC=gcc LUA_INCLUDE_DIR=/usr/local/include/luajit-2.0/
make install LUA_LIB_DIR=/opt/lualib


yum install libpcre libpcre-dev
wget http://luarocks.org/releases/luarocks-2.3.0.tar.gz
./configure --with-lua-include=/usr/local/include/luajit-2.0/
make
make bootstrap
luarocks install lua-cjson
luarocks install lrexlib-PCRE

编译参数:

./configure \
--prefix=/usr/local/server/nginx \
--conf-path=/usr/local/server/nginx/conf/nginx.conf \
--pid-path=/usr/local/server/nginx/tengine.pid \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-mail \
--with-mail_ssl_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--add-module=/usr/local/src/lua-nginx-module-0.9.13 \
--add-module=/usr/local/src/ngx_devel_kit-0.2.19 \
--add-module=/usr/local/src/echo-nginx-module-0.53 \
--add-module=/usr/local/src/redis2-nginx-module-0.13 \
--add-module=/usr/local/src/set-misc-nginx-module-0.30 
# 如果出现启动nginx,出现动态链接库缺失,请: 
vi /etc/ld.so.conf.d/user_lib.conf 
增加 /usr/local/lib 

ldconfig 后生效 

Tengine 2.1.2 with Lua 编译参数参考

./configure \
--prefix=/usr/local/server/tengine \
--conf-path=/usr/local/server/tengine/conf/nginx.conf \
--pid-path=/usr/local/sersver/tengine/nginx.pid \
--without-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-mail \
--with-mail_ssl_module \
--with-http_concat_module \
--with-http_sysguard_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-http_concat_module \
--add-module=/usr/local/src/lua-nginx-module-0.9.13 \
--add-module=/usr/local/src/ngx_devel_kit-0.2.19 \
--add-module=/usr/local/src/echo-nginx-module-0.53 \
--add-module=/usr/local/src/redis2-nginx-module-0.13 \
--add-module=/usr/local/src/set-misc-nginx-module-0.30 

修改 Nginx Server 名称

修改源码 nginx.h

#define NGINX_VAR          "NGINX-XX"

or

#define TENGINE            "Tengine-xx"

./configure --prefix=/usr/local/server/tengine --conf-path=/usr/local/server/tengine/conf/nginx.conf --pid-path=/usr/local/server/tengine/tengine.pid --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_secure_link_module --with-http_stub_status_module --with-http_gunzip_module --with-http_image_filter_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=/usr/local/src/lua-nginx-module-0.9.13 --add-module=/usr/local/src/ngx_devel_kit-0.2.19 --add-module=/usr/local/src/echo-nginx-module-0.53 --with-http_concat_module --with-http_sysguard_module --add-module=/usr/local/src/redis2-nginx-module-0.13 --add-module=/usr/local/src/set-misc-nginx-module-0.30