Nginx 是一个高度模块化的 Web 服务器和反向代理服务器,其功能可以通过模块进行扩展。Nginx 的模块分为核心模块第三方模块,核心模块是 Nginx 官方维护的模块,而第三方模块则由社区或开发者提供。

以下是 Nginx 模块的分类和常见模块介绍:


1. 核心模块

核心模块是 Nginx 的基础模块,提供了 Nginx 的核心功能。

1.1 HTTP 核心模块

  • ngx_http_core_module:提供 HTTP 服务器的核心功能,如配置监听端口、定义虚拟主机、处理请求等。
  • ngx_http_access_module:基于 IP 地址的访问控制。
  • ngx_http_auth_basic_module:基于 HTTP Basic 认证的访问控制。
  • ngx_http_gzip_module:支持 Gzip 压缩。
  • ngx_http_proxy_module:提供反向代理功能。
  • ngx_http_rewrite_module:支持 URL 重写和重定向。
  • ngx_http_ssl_module:支持 HTTPS(SSL/TLS)。
  • ngx_http_log_module:配置访问日志格式和存储。
  • ngx_http_upstream_module:定义后端服务器组,支持负载均衡。

1.2 Stream 核心模块

  • ngx_stream_core_module:提供 TCP/UDP 代理的核心功能。
  • ngx_stream_proxy_module:支持 TCP/UDP 反向代理。
  • ngx_stream_ssl_module:支持 TCP/UDP 的 SSL/TLS 加密。

1.3 其他核心模块

  • ngx_core_module:提供 Nginx 的核心配置,如工作进程数、用户组等。
  • ngx_events_module:配置事件模型(如 epoll、kqueue 等)。

2. 第三方模块

第三方模块由社区或开发者开发,用于扩展 Nginx 的功能。以下是一些常用的第三方模块:

2.1 Lua 模块

  • ngx_lua_module:将 Lua 脚本嵌入 Nginx,实现动态请求处理、访问控制等功能。
  • lua-resty-core:提供 Lua API 用于与 Nginx 核心功能交互。
  • lua-resty-redis:支持通过 Lua 脚本与 Redis 交互。

2.2 缓存模块

  • ngx_cache_purge:支持缓存清除功能。
  • ngx_slowfs_cache:为慢速存储(如 NFS)提供缓存功能。

2.3 安全模块

  • ngx_http_auth_request_module:基于子请求的认证。
  • ModSecurity:提供 Web 应用防火墙(WAF)功能。
  • ngx_http_geoip_module:基于 GeoIP 的访问控制。

2.4 负载均衡模块

  • ngx_http_upstream_check_module:提供后端服务器的健康检查功能。
  • ngx_http_upstream_consistent_hash_module:支持一致性哈希负载均衡。

2.5 日志与监控模块

  • ngx_http_stub_status_module:提供 Nginx 的状态监控信息。
  • ngx_http_sysguard_module:监控系统资源(如 CPU、内存)并采取相应措施。

2.6 其他功能模块

  • ngx_http_image_filter_module:支持图片裁剪、缩放等操作。
  • ngx_http_headers_module:自定义 HTTP 请求头和响应头。
  • ngx_http_sub_module:替换响应内容中的字符串。

3. 模块的加载与使用

Nginx 的模块需要在编译时加载。以下是加载模块的步骤:

3.1 编译时加载模块

在编译 Nginx 时,通过 --add-module 参数指定第三方模块的路径:

./configure --add-module=/path/to/module
make
sudo make install

3.2 动态加载模块(Nginx 1.9.11+)

Nginx 支持动态加载模块,无需重新编译:

  1. 编译模块为 .so 文件:

    ./configure --add-dynamic-module=/path/to/module
    make modules
  2. nginx.conf 中加载模块:

    load_module modules/ngx_http_example_module.so;

4. 常用模块示例

4.1 ngx_http_proxy_module(反向代理)

location / {
    proxy_pass http://backend_server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

4.2 ngx_http_rewrite_module(URL 重写)

location /old {
    rewrite ^/old/(.*)$ /new/$1 permanent;
}

4.3 ngx_http_lua_module(Lua 脚本)

location /hello {
    content_by_lua_block {
        ngx.say("Hello, Lua!")
    }
}

4.4 ngx_http_upstream_module(负载均衡)

upstream backend {
    server 192.168.1.1;
    server 192.168.1.2;
}

location / {
    proxy_pass http://backend;
}

5. 总结

Nginx 的模块化设计使其功能非常灵活,核心模块提供了基础功能,而第三方模块则进一步扩展了其能力。通过合理选择和配置模块,可以满足各种复杂的应用场景需求。

标签: Nginx

添加新评论