需要更多信息

需要更多信息

我有一个复杂的问题,我不知道如何调试。在我的生产服务器中,我有一个从源代码编译的 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

需要更多信息

如果没有更多信息,很难确切地说出问题是什么。我只是想给你一些想法。编辑你的帖子并提供更多信息,也许我们可以找到答案。

问题

  1. nginx 是如何运行的?它是使用服务运行还是使用临时方法运行?
    • 如果它是由 init(upstart、systemd 等)运行的,它们(通常?)会记录有关正在重新启动的进程的一些信息。如果没有,您可以查看 init 作业并添加日志打印以记录其启动/停止的时间。
  2. 有什么相关内容吗/var/log/syslog
  3. 保存nginx 中的stdout/ stderr。类似这样。当它再次发生时,也许你会发现一些有趣的事情。 nohup /usr/local/nginx/sbin/nginx >> /var/log/nginx.out 2>&1 &
  4. 运行一个脚本,该脚本会在发现 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/

相关内容