Nginx 的瑞士军刀——各种模块初探

Nginx 是一个轻量的、高效的、支持高并发的开源服务器,并因为这些优势在软件领域内被广泛应用。常见的使用场景有作为反向代理服务器,存放文件等静态资源的服务器等。

Nginx 诞生于 2004 年,在不断发展壮大的过程中,它在某些场景下可以代替 Apache 服务器,许多公司的 LAMP 架构也迁移到 LNMP 架构。Nginx 本身是轻量的,只包含作为 HTTP 服务器的必要代码,但是 Nginx 支持在编译的过程中通过编译参数中加入模块来拓展功能,这也是它能比肩传统的 Apache 服务器的原因。

官方模块与第三方模块

Nginx 在编译参数中加入的模块主要有两类:

  • 一类是官方提供的扩展模块,形式上为 --with-xxx,如加入SSL协议支持 --with-http_ssl_module
  • 另一类是第三方提供的模块,形式上为 --add-module=xxx,如加入文件上传模块 --add-module=<第三方模块所在路径>/nginx-upload-module-master

静态加载与动态加载

同时,模块加载的方式也有两种:

  • 静态加载模块,形式和上述的两类一样,没有变化,这种方法模块的库会编译到 Nginx 的二进制文件中
  • 动态加载模块,形式为 --with-http_ssl_module=dynamic--add-dynamic-module=<第三方模块所在路径>/nginx-upload-module-master,这种方法加载的模块默认存在在 Nginx 工作目录的 modules 目录下,在配置文件中通过 load_module "modules/<模块名称>.so";语句来引用

动态加载是 Nginx 1.9.11版本引入的功能,通过配置文件来设置某次运行时是否加载某个模块,可以更好地保持 Nginx 本身轻量和灵活的特性。

在 Nginx 1.11.5 版本以后,可以通过 --with-compat 支持模块的单独编译,因此动态加载的模块可以不用写在编译参数里,直接在配置文件中 load_module 就好,这样就避免了在生产环境上替换 Nginx 的二进制文件可能造成的风险。

常见模块归纳

Nginx 的模块库十分庞大,这里只归纳一些工作和学习过程中接触到的常用模块:

资源/效率优化类:

--with-file-aio 对大文件采用aio线程池进行发送,提高内存利用效率
--with-http_slice_module 可以将一个http请求拆分为多个,每个请求返回响应内容的一部分,使大文件的缓存更有效率
--with-http_gunzip_module --with-http_gzip_static_module 提供额外的压缩功能,减少磁盘占用
--add-module=<路径>/nginx-sticky-module-1.1 可以使 Nginx 支持基于 cookie 进行负载均衡策略

安全加固类:

--with-http_auth_request_module 允许添加第三方的认证源,如LDAP
--with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module 支持SSL协议,对会话加密
--with-http_dav_module 为文件和目录指定权限,限制不同类型的用户对于页面有不同的操作权限
--with-http_secure_link_module 防止盗链

功能/工具类:

这类模块实现的功能也可以在前后端应用或者脚本实现
--with-http_addition_module --with-http_sub_module 用于在相应的页面上添加或替换某些内容
-with-http_realip_module 可以过滤掉Nginx服务前的代理服务器,获得客户端的真实IP
--with-http_degradation_module 服务降级,允许在内存不足的情况下返回204或444码,在负载均衡的情况下可以为调度提供依据
--add-module=<路径>/nginx-upload-module-master 可以获取文件上传进度的模块

协议/库支持类:

--with-http_v2_module 支持HTTP协议v1.2版本
--with-http_flv_module --with-http_mp4_module 支持对FLV(flash)文件、mp4文件的播放
--with-openssl-opt 是HTTPS协议的服务器也支持SNI
这个好像是默认支持的,可以通过查看 Nginx 编译参数来确定

# /usr/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled          //包含这段就说明支持 HTTPS 的 SNI
configure arguments: ......
数据统计类:

--with-http_stub_status_module 可以实时看到nginx的处理状态,可以配合zabbix做监控
--add-module=<路径>/ngx_req_status-master 流量带宽等请求状态统计

你可能感兴趣的:(Nginx,Nginx)