查看模块(组)
less /path/to/objs/ngx_modules.c
调试
调试输出配置
下载echo-nginx-module模块并安装
mv echo-nginx-module-0.60 echo-nginx-module
./configure --add-module=/path/to/echo-nginx-module
location / {
default_type text/plain;
echo -n Hello;
echo $args;
}
echo模块其他常用指令
ech_duplicate 按照指定的次数重复输出指定内容,第1个参数为次数,第2个参数为指定内容
echo_flush 刷新缓冲区的内容,并输出
echo_sleep 按照指定的秒数,延迟输出
echo_reset_timer 重置当前请求花费的时间
echo_location 在当前location中读取其他location中的内容
echo_foreach_split 按照指定的字符分割给出的字符串,并对其进行遍历,其第1个参数表示分隔符,第2个参数表示待分割的字符串
echo_end 用于终止,如echo_foreach_split循环和条件控制结构
echo_exec 内部重定向到指定位置
echo_status 指定默认的响应状态码
echo_before_body 在输出过滤器中整体内容输出前,输出指定内容
echo_after_body 在输出过滤器中整体内容输出后,输出指定内容
调试日志文件
编译时使用--with-debug选项
kill -USR2 $(cat /var/run/nginx.pid)
在 Nginx 的重新加载过程中,新的主进程会处理新的连接,旧的主进程会在处理完原有的连接后关闭
kill -WINCH $(cat /var/run/nginx.pid.oldbin)
kill -HUP $(cat /var/run/nginx.pid.oldbin)
kill -QUIT $(cat /var/run/nginx.pid)
kill -TERM $(cat /var/run/nginx.pid)
用于调试和定位问题的相关选项
daemon off
是否以守护进程方式运行,默认为on,设为off将在前台运行
方便调试,当修改配置文件后,nginx启动,ctrl+c则可关闭nginx
master_process {on|off}
是否以master/worker模型来运行nginx
error_log 位置 级别
设置日志级别,使用debug级别时,需要在编译nginx时使用--with-debug选项
错误日志
nginx错误日志级别
debug: 最详细的日志级别,记录调试信息
info: 记录常规的信息,例如启动、停止等操作
notice: 记录一般性的重要信息。可以用于记录临时性的问题
warn: 记录警告信息
error: 记录错误信息
crit: 记录严重的错误信息
alert: 记录需要立即采取行动的紧急情况
emerg: 最高级别的日志,表示系统发生了严重的不可恢复的错误
nginx错误日志内容
2019/10/14 18:50:34[error]2632
file or directory),client:127.0.0.1,server: wwwexample.com,request:"GET /blog
HTTP/1.0",host: "www.example.com"
时间戳(2012/10/14 18:50:34);
日志级别(error);
运行 pid(2632);
连接数(1);
系统调用(open);
系统调用的参数(/opt/nginx/html/blog):
从系统调用产生的错误消息(2:Nosuchfile or directory);
造成错误请求的客户端(127.0.0.1);
负责处理请求的server(www.example.com);
请求本身(GET /blog Http/1.0);
在请求中发送的Host头(www.example.com)
nginx错误日志实例
客户端请求错误(例如 400、401、403、404 等):
2024/05/25 12:34:56 [error] 1234#1234: *5678 open() "/path/to/file.html" failed (2: No such file or directory), client: 1.2.3.4, server: example.com, request: "GET /path/to/file.html HTTP/1.1", host: "example.com"
这种错误通常表示客户端发送了一个无效的请求,比如请求的文件不存在。解决方法包括检查请求的 URL 是否正确、文件是否存在、文件权限等。
服务器内部错误(例如 500 系列错误):
2024/05/25 12:34:56 [error] 1234#1234: *5678 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 1.2.3.4, server: example.com, request: "GET /path/to/resource HTTP/1.1", upstream: "http://127.0.0.1:8080/path/to/resource", host: "example.com"
这种错误通常表示服务器在处理请求时遇到了问题,比如与后端应用程序的连接超时、后端应用程序未能正确响应等。解决方法包括增加后端服务器的响应时间、检查后端应用程序的运行状态、调整 nginx 配置等。
SSL/TLS 相关错误:
2024/05/25 12:34:56 [error] 1234#1234: *5678 SSL_do_handshake() failed (SSL: error:1417D18C:SSL routines:tls_process_client_hello:version too low) while SSL handshaking, client: 1.2.3.4, server: example.com
这种错误通常表示 SSL/TLS 握手过程中出现了问题,比如客户端使用了不受支持的 SSL/TLS 版本。解决方法包括升级 SSL/TLS 配置、更新 SSL/TLS 证书、调整 nginx 配置等。
目录索引错误:
2024/05/25 12:34:56 [error] 1234#1234: *5678 directory index of "/path/to/directory/" is forbidden, client: 1.2.3.4, server: example.com, request: "GET /path/to/directory/ HTTP/1.1", host: "example.com"
这种错误通常表示请求了一个目录,但服务器未配置自动索引,因此禁止列出目录内容。解决方法包括配置服务器允许目录索引、提供默认的索引文件、禁止访问目录等。
解析错误日志shell命令
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
awk '$4 >= "[25/May/2024:00:00:00" && $4 <= "[25/May/2024:23:59:59"' /var/log/nginx/access.log
grep '" 200 ' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
grep -v '" 200 ' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
日志分析工具ngxtop
yum install ngxtop
ngxtop --config /usr/local/nginx/conf/nginx.conf -n 10
ngxtop -l /path/to/nginx_log_file
ngxtop --config /usr/local/nginx/conf/nginx.conf top remote_addr
ngxtop -l /data1/access.log --filter 'status == 502'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)