AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 433024
Accepted
Rob
Rob
Asked: 2012-09-29 08:57:25 +0800 CST2012-09-29 08:57:25 +0800 CST 2012-09-29 08:57:25 +0800 CST

除了错误日志,我如何调试 nginx?

  • 772

我目前正在接收相当大的 HTTP 泛洪,它导致我的 nginx 反向代理生成 502 Bad Gateway。

我有一个前端服务器运行 nginx 作为我的后端服务器的代理,但它只是收到一堆connect() failed (110: Connection timed out) while connecting to upstream错误。很多。如果我绕过代理服务器连接到后端,我可以很好地运行网站,所以我知道它在某个地方的反向代理中。但是,我不知道如何确定它超时的原因。

有什么帮助吗?

在 CentOS 6.2 上运行 nginx 1.2.3

nginx
  • 4 4 个回答
  • 72071 Views

4 个回答

  • Voted
  1. user31170
    2012-10-07T15:40:15+08:002012-10-07T15:40:15+08:00

    除非您想放入 dtrace 探测器,否则没有比这更迂腐的了:

    1. 设置调试日志级别:/etc/nginx/nginx.conf:

      ...
      http {
              ...
              error_log /var/log/nginx/error.log debug; # todo testing remove me not for production use
              ...
      }
      
    2. 在另一个窗口中设置 tcpdump:

      tcpdump not port 22 -vvv -s0 -q -XXX
      
    3. 在另一个窗口中监视日志文件:

      tail -f /var/log/nginx/*
      
    4. 使用 strace 交互启动 nginx:

      # top of /etc/nginx/nginx.conf:
      
      daemon off; # todo testing remove me not for production use
      

      接着

       $ strace nginx 
      

    可以使用用--with-debug. 通过运行检查它:

        nginx -V 2>&1 | grep -- '--with-debug' # no output if not debug
    

    另一个默认不编译的好模块是:HttpStubStatusModule。很可能,任何体面的设置都需要自定义编译的 nginx(强烈推荐使用发行版的打包工具进行打包)。

    其中大部分不适合生产使用,如果您需要更多统计信息,请查看使用 gperf 编译 nginx。

    • 44
  2. Best Answer
    jgoldschrafe
    2012-10-01T10:13:44+08:002012-10-01T10:13:44+08:00

    我假设您已经将 Nginx 错误日志记录级别提高到调试级别。如果没有,从那里开始。

    你最好的选择可能是strace用来查看 Nginx 进行的系统调用。特别是,您需要注意connect()电话,并留意这些电话的返回码(man 2 connect可以是您的朋友)。

    获得该信息后,您可以更好地猜测问题是否仅限于您的前端代理,或者与代理和后端应用程序服务器之间的交互有关。

    • 23
  3. rahul286
    2012-10-06T14:00:45+08:002012-10-06T14:00:45+08:00

    看起来您正在调试高流量站点。

    使用debugwithdebug_connection指令,这样 nginx 错误日志将仅显示来自您的 IP 的调试日志。

    一旦您开始看到一些有用的错误日志而不是激活整个 nginx 配置的调试选项,请在负责 reverse_proxy 连接error_log /path/to/some/file/ debug;的块中添加一个单独的指令。location {..}

    通过这种方式,您将能够仅从您的 IP 中隔离调试错误日志。

    尝试将它与您正在发出的请求(从您的浏览器)联系起来。

    例如,请查看:https ://easyengine.io/tutorials/nginx/debugging/

    更进一步,你可以使用 Nginx 的HttpEchoModule

    • 5
  4. Ben Lessani
    2012-10-06T13:00:12+08:002012-10-06T13:00:12+08:00

    我从来没有发现 Nginx 是瓶颈,在大多数情况下,它比后端更强大。但是如果你在没有 Nginx 的情况下进行测试并且没有发现错误,那么它将会是其中之一(或两者):

    1. Nginx 配置问题
      1. 上游超时值错误
      2. 上游探测 URL 错误
      3. 工人太少
      4. 等等。
    2. 操作系统 TCP/IP 瓶颈
      1. 可能是代理本身导致了开放端口和状态的重复。无论是文件描述符、端口、TCP 连接

    没有看到你的 Nginx 配置,没有人可以评论前者。如果没有来自操作系统的合适输出,没有人可以对后者发表评论。

    • 3

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve