Nginx的模块化介绍

一、什么是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
2
3
# 1. 查看当前Nginx编译参数nginx -V
# 2. 下载Nginx源码(版本需一致)wget http://nginx.org/download/nginx-1.18.0.tar.gztar -xzvf nginx-1.18.0.tar.gzcd nginx-1.18.0
# 3. 重新编译,添加新模块./configure --with-http_ssl_modulemakesudo make install

2. 安装第三方模块

ngx_http_lua_module(Lua脚本支持)为例:

1
2
# 1. 下载Nginx源码和Lua模块git clone https://github.com/openresty/lua-nginx-module.git
# 2. 编译时添加模块./configure --add-module=/path/to/lua-nginx-modulemakesudo make install

四、常用Nginx模块示例

1. ngx_http_rewrite_module(URL重写)

1
2
3
server {    listen 80;    server_name example.com;
# 永久重定向 /old → /new rewrite ^/old$ /new permanent;
# 动态重写 /user/123 → /profile?id=123 rewrite ^/user/(\d+)$ /profile?id=$1 last;}

2. ngx_http_proxy_module(反向代理)

1
2
server {    listen 80;    server_name api.example.com;
location / { proxy_pass http://backend_server; # 转发到后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}

3. ngx_http_upstream_module(负载均衡)

1
2
upstream backend {    server 192.168.1.1 weight=3;  # 权重3    server 192.168.1.2;           # 默认权重1    server 192.168.1.3 backup;    # 备用服务器}
server { location / { proxy_pass http://backend; }}

五、动态模块(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配置,提升服务器性能!