Nginx系列08(Nginx 模块扩展、Nginx 日志管理)

目录

[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 中。
  • 场景示例
    • 使用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_logerror_log指令分别管理访问日志和错误日志。access_log指令用于定义访问日志的存储路径、格式以及是否记录等;error_log指令用于设置错误日志的路径、日志级别等。日志级别从低到高依次为debuginfonoticewarnerrorcritalertemerg,较低级别记录更详细的信息,生产环境中一般设置为errorwarn级别以减少日志量。
  • 场景示例
    • 配置访问日志 :假设你希望将访问日志记录到/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文件中,便于管理员快速定位和排查服务器运行过程中出现的问题。

相关推荐
ChinaRainbowSea6 小时前
8. Nginx 配合 + Keepalived 搭建高可用集群
java·运维·服务器·后端·nginx
若云止水6 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init
nginx·ubuntu·list
web130933203986 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
若云止水6 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(5)
网络·nginx·ubuntu
GGGGGGGGGGGGGG.9 小时前
nginx+keepalived负载均衡及高可用
前端·nginx·负载均衡
m0_7482309411 小时前
详解Nginx no live upstreams while connecting to upstream
运维·nginx
神秘的土鸡18 小时前
Linux中WgCloud的服务器与客户端监控系统(完整部署教程)
linux·运维·nginx·adb·监控·自动化运维
weixin_4258782319 小时前
Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构
nginx·架构·负载均衡
Jerry.张蒙20 小时前
人工智能核心技术初识:Prompt、RAG、Agent与大模型微调
运维·人工智能·人机交互·运维开发·学习方法
若云止水1 天前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(1)
数据库·nginx·ubuntu