目录
[Nginx 模块扩展](#Nginx 模块扩展)
[Nginx 日志管理](#Nginx 日志管理)
Nginx 模块扩展
- 概念 :Nginx 的模块扩展机制允许用户根据自身需求为 Nginx 添加额外功能。Nginx 官方提供了丰富的核心模块,如
http_core_module
用于处理 HTTP 基础功能,events_module
负责事件驱动处理等。同时,用户还可以通过编译时添加第三方模块或在运行时动态加载模块(部分模块支持)的方式,拓展 Nginx 的功能边界,使其能更好地满足多样化的业务场景。 - 原理 :
- 编译时添加模块 :在从源代码编译 Nginx 时,通过
./configure
命令的--add - module
选项指定第三方模块的路径。例如,若要添加ngx_http_redis_module
模块(用于与 Redis 交互),假设该模块源代码位于/path/to/ngx_http_redis_module
,则在编译 Nginx 时执行./configure --prefix=/usr/local/nginx --add - module=/path/to/ngx_http_redis_module
。编译过程中,Nginx 会将指定模块的代码整合进最终的可执行文件中。 - 动态加载模块 :从 Nginx 1.9.11 版本开始支持动态模块加载。需要在编译 Nginx 时,使用
--with - dynamic - modules
选项启用动态模块支持。之后,可通过load_module
指令在运行时加载特定模块。例如,load_module modules/ngx_http_geoip_module.so;
,将ngx_http_geoip_module
模块动态加载到 Nginx 中。
- 编译时添加模块 :在从源代码编译 Nginx 时,通过
- 场景示例 :
- 使用
ngx_http_rewrite_module
模块实现 URL 重写 :假设你有一个旧的网站系统,URL 结构发生了变化,需要将旧的 URL 重定向到新的 URL。例如,将所有以/old - page/
开头的 URL 重定向到/new - page/
开头的 URL。配置如下:
- 使用
bash
http {
server {
listen 80;
server_name example.com;
location / {
rewrite ^/old - page/(.*)$ /new - page/$1 permanent;
}
}
}
在这个配置中,ngx_http_rewrite_module
模块的rewrite
指令发挥作用,^/old - page/(.*)$
是正则表达式,匹配以/old - page/
开头的 URL,/new - page/$1
表示将匹配到的内容重定向到新的 URL 格式,permanent
表示返回 301 永久重定向,告知搜索引擎和浏览器该 URL 已永久改变。
- 使用
ngx_http_gzip_module
模块开启压缩功能:为了减少网络传输数据量,提高网站访问速度,开启 Nginx 的 gzip 压缩功能。配置如下:
bash
http {
gzip on;
gzip_min_length 1024;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
这里ngx_http_gzip_module
模块通过gzip on;
开启压缩功能,gzip_min_length 1024;
表示当响应数据长度大于 1024 字节时才进行压缩,gzip_proxied any;
表示对所有代理请求都进行压缩,gzip_types
指定了需要压缩的文件类型。
Nginx 日志管理
- 概念:Nginx 日志管理用于记录服务器运行过程中的各种信息,包括客户端的访问请求、服务器的响应状态、错误信息等。通过对这些日志的分析,管理员可以了解服务器的运行状况、用户行为模式,进而发现潜在的性能问题、安全威胁以及进行业务数据分析。
- 原理 :Nginx 通过
access_log
和error_log
指令分别管理访问日志和错误日志。access_log
指令用于定义访问日志的存储路径、格式以及是否记录等;error_log
指令用于设置错误日志的路径、日志级别等。日志级别从低到高依次为debug
、info
、notice
、warn
、error
、crit
、alert
、emerg
,较低级别记录更详细的信息,生产环境中一般设置为error
或warn
级别以减少日志量。 - 场景示例 :
- 配置访问日志 :假设你希望将访问日志记录到
/var/log/nginx/access.log
文件中,并使用自定义的日志格式,该格式包含客户端 IP、访问时间、请求方法、请求 URL、响应状态码和响应数据大小。配置如下:
- 配置访问日志 :假设你希望将访问日志记录到
bash
http {
log_format my_format '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent';
access_log /var/log/nginx/access.log my_format;
}
在上述配置中,log_format
定义了名为my_format
的日志格式,$remote_addr
表示客户端 IP,$remote_user
表示客户端用户(通常为空),$time_local
表示访问时间,$request
表示请求行(包含请求方法、URL 等),$status
表示响应状态码,$body_bytes_sent
表示发送给客户端的响应数据大小。access_log
指令将访问日志记录到指定路径,并使用my_format
格式。
- 配置错误日志 :将错误日志记录到
/var/log/nginx/error.log
文件中,设置日志级别为error
,只记录错误级别的信息。配置如下:
bash
error_log /var/log/nginx/error.log error;
通过这样的配置,Nginx 只会将错误级别的信息记录到/var/log/nginx/error.log
文件中,便于管理员快速定位和排查服务器运行过程中出现的问题。