Nginx的模块化介绍
Nginx的模块化介绍
ZhangCurry一、什么是Nginx模块化?
Nginx之所以强大,很大程度上归功于它的模块化设计。你可以把Nginx想象成一个乐高玩具,它的核心只提供最基础的功能(比如处理网络请求),而其他高级功能(比如负载均衡、缓存、HTTPS支持)都是通过模块来扩展的。
模块化的优势
- 灵活:可以按需加载模块,避免不必要的性能开销。
- 可扩展:可以自己开发模块,或者使用第三方模块增强功能。
- 高性能:模块化设计让Nginx保持轻量级,同时支持高并发。
模块化主要分为两种:
内置模块(Built-in Modules)
随Nginx官方源码一起发布,编译时默认包含或可选包含。
例如:
ngx_http_core_module(HTTP核心模块)、ngx_http_rewrite_module(URL重写模块)。第三方模块(Third-party Modules)
由社区或开发者提供,需要手动编译进Nginx。
例如:
ngx_http_lua_module(Lua脚本支持)、ngx_brotli(Brotli压缩)。
二、如何查看Nginx已经安装的模块?
在终端运行:
1 | nginx -V |
输出示例:
1 | nginx version: nginx/1.18.0built with OpenSSL 1.1.1gconfigure arguments: --with-http_ssl_module --with-http_realip_module --without-http_gzip_module |
三、如何安装Nginx模块?
Nginx模块必须在编译时安装,不能像Apache那样动态加载(虽然有动态模块支持,但限制较多)。
1. 安装内置模块
假设你要启用http_ssl_module(HTTPS支持),但当前Nginx未编译该模块:
1 | # 1. 查看当前Nginx编译参数nginx -V |
2. 安装第三方模块
以ngx_http_lua_module(Lua脚本支持)为例:
1 | # 1. 下载Nginx源码和Lua模块git clone https://github.com/openresty/lua-nginx-module.git |
四、常用Nginx模块示例
1. ngx_http_rewrite_module(URL重写)
1 | server { listen 80; server_name example.com; |
2. ngx_http_proxy_module(反向代理)
1 | server { listen 80; server_name api.example.com; |
3. ngx_http_upstream_module(负载均衡)
1 | upstream backend { server 192.168.1.1 weight=3; # 权重3 server 192.168.1.2; # 默认权重1 server 192.168.1.3 backup; # 备用服务器} |
五、动态模块(Nginx 1.9.11+)
Nginx 1.9.11+ 支持动态模块(.so文件),可以在不重新编译Nginx的情况下加载模块。
1. 查看已加载的动态模块
1 | nginx -V 2>&1 | grep dynamic |
2. 动态加载模块
编译动态模块:
1 | ./configure --with-http_ssl_module --add-dynamic-module=/path/to/modulemakesudo make install |
在nginx.conf中加载:
1 | load_module modules/ngx_http_ssl_module.so; |
六、总结
| 要点 | 说明 |
|---|---|
| 模块类型 | 内置模块(官方提供)、第三方模块(社区开发) |
| 安装方式 | 编译时添加(--with-xxx_module或--add-module) |
| 动态模块 | Nginx 1.9.11+支持,可运行时加载(.so文件) |
| 常用模块 | rewrite(重写)、proxy(反向代理)、upstream(负载均衡) |
通过模块化,Nginx可以灵活扩展功能,适应各种场景。掌握模块的安装和使用,能让你更好地优化Nginx配置,提升服务器性能!



