Nginx"断管"调试Django时?

时间:2016-07-05 19:25:26

标签: django debugging nginx gunicorn

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

最近,我开始遇到问题。现在发生的事情是,当我在一个断点处停下来时,几分钟之后,我已经停止的网页将会改变并显示“未找到404”#34;如果我在调试器中再迈出一步,我会看到这个错误:

- Broken pipe from ('127.0.0.1', 43742)

这种情况发生在我通过其域名访问的开发,转发和生产服务器上,例如: " web01.example.com" (不是真的例子)。

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

感谢。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。首先我观察到,当我在断点处停下来时,页面总是在一分钟后超时,这表明如果Web服务器花了超过60秒的时间响应,Nginx与Web服务器的连接就会超时。然后我找到了一个N​​ginx 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。