【问题标题】:Nginx "Broken pipe" When Debugging Django?Nginx 调试 Django 时出现“断管”?
【发布时间】:2016-11-07 17:55:03
【问题描述】:

我有一个使用 Gunicorn 和 Nginx 的 Django 站点。有时,我会遇到需要调试的问题。过去我会关闭 Gunicorn 和 Nginx,进入我的 Django 项目目录并启动 Django 开发服务器(“python ./manage.py runserver 0:8000”),然后重新启动 Nginx。然后我可以插入 set_trace() 命令并进行调试。当我解决问题时,我会关闭 Nginx,然后重新启动 Gunicorn 和 Nginx。我很确定这是有效的。

不过,最近我开始遇到问题。现在发生的情况是,当我在断点处停止时,几分钟后,我停止的网页将更改并显示“404 Not Found”,如果我在调试器中再采取一步,我会看到这个错误:

- Broken pipe from ('127.0.0.1', 43742)

这发生在我通过域名访问的开发、登台和生产服务器上,例如“web01.example.com”(不是真正的示例)。

在远程服务器上调试 Django 应用程序的正确方法是什么?

谢谢。

【问题讨论】:

    标签: django debugging nginx gunicorn


    【解决方案1】:

    我发现了问题所在。首先,我观察到当我停在断点处时,页面总是在一分钟后超时,这表明如果 Web 服务器的响应时间超过 60 秒,Nginx 与 Web 服务器的连接就会超时。然后我找到了一个 Nginx proxy_read_timeout directive,它定义了这个超时。然后只需在我的 Nginx 配置文件中更改超时长度即可:

    # /etc/nginx/sites-enabled/example.conf
    http {
         server {
                ...
                location @django {
                    ...
                    # Set timeout to 1 hour
                    proxy_read_timeout 3600s;
                    ...
                }
                ...
         }
    }
    

    完成此更改后,您需要重新加载 Nginx,而不是重新启动它,以使此更改生效。然后按照我上面的说明启动 Django,现在可以调试 Django 应用程序而不会超时。请务必在完成调试后删除超时设置,再次重新加载 Nginx,然后重新启动 Gunicorn。

    【讨论】:

    • 请问,这个值设置得太高有什么坏处?
    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2022-10-21
    • 2012-08-30
    • 2015-04-23
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多