我有一个复杂的问题,我不知道如何调试。在我的生产服务器中,我有一个从源代码编译的 nginx,页面速度很快。一切正常,但有时,我无法识别模式,nginx 停止工作,错误日志中没有任何错误。
error_log /usr/local/nginx/localhost-error.log;
如果我执行 HTOP,我找不到任何与 nginx 相关的 pid,所以每次遇到此问题时我都需要手动启动 nginx。
nohup /usr/local/nginx/sbin/nginx &
除此之外,nginx 运行良好。我不知道这是否重要,但有时我会收到针对基本身份验证的暴力攻击,但我在 3 次错误尝试后使用“fail to ban”功能。
我怎样才能找到这个问题的原因?
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
nginx version: nginx/1.10.1
答案1
需要更多信息
如果没有更多信息,很难确切地说出问题是什么。我只是想给你一些想法。编辑你的帖子并提供更多信息,也许我们可以找到答案。
问题
- nginx 是如何运行的?它是使用服务运行还是使用临时方法运行?
- 如果它是由 init(upstart、systemd 等)运行的,它们(通常?)会记录有关正在重新启动的进程的一些信息。如果没有,您可以查看 init 作业并添加日志打印以记录其启动/停止的时间。
- 有什么相关内容吗
/var/log/syslog
? - 保存nginx 中的
stdout
/stderr
。类似这样。当它再次发生时,也许你会发现一些有趣的事情。nohup /usr/local/nginx/sbin/nginx >> /var/log/nginx.out 2>&1 &
运行一个脚本,该脚本会在发现 nginx 死机时记录日志。然后您可以使用它将其与系统上的其他事件关联起来。
while true; do NUM_INSTANCES=$(ps -A | grep nginx | wc -l) if [[ "$NUM_INSTANCES" == 0 ]]; then echo "$(date) nginx just died" >> /var/log/syslog fi sleep 1 done
您还可以
echo
用记录器调用替换。我使用过类似的脚本来调试我的系统。只需确保在脚本文件而不是 shell 中运行它,这样您就可以通过执行来终止它killall <scriptname>.sh
。
此外,nginx 调试页面上的某些信息可能会有帮助。https://www.nginx.com/resources/wiki/start/topics/tutorials/debugging/