Nginx模块
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 支持动态加载模块,无需重新编译:
编译模块为
.so
文件:./configure --add-dynamic-module=/path/to/module make modules
在
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 的模块化设计使其功能非常灵活,核心模块提供了基础功能,而第三方模块则进一步扩展了其能力。通过合理选择和配置模块,可以满足各种复杂的应用场景需求。