2012-05-01 57 views
8

我有用nginx和uwsgi烧瓶的facebook应用程序。当它从Facebook收到POST,它总是有错误:错误:读取上游时,readv()失败(104:由对等方重置连接)

readv() failed (104: Connection reset by peer) while reading upstream 

但是,当我直接访问我的应用程序(使用GET方法),它运行平稳。我做了什么:

只有 POST方法
  1. 限制@ app.route - 不起作用。
  2. 在wsgi中添加限制:uwsgi_buffer_size(如果facebook的请求很大)和uwsgi_harakiri(如果uwsgi在完成请求之前提供超时) - 不起作用。

我有变通方法django但无法弄清楚如何尚未在烧瓶落实。任何人都可以帮忙吗?

+0

答案对我来说有点荒谬。即使我的流程没有做任何事情,我也必须处理所有的帖子数据。如果request.form中没有“Nothing”:通过。它的工作..顺便说一句,Facebook与POST请求打开应用程序,所以我应该补充说,每一个路线。必须有更好的方法。 – asofyan

+0

如果套接字上有数据,则必须阅读它们(没有其他选择)。在flask维基上,你可以找到一个中间件绕过代理设置的这个常见问题:http://flask.pocoo.org/snippets/47/ uWSGI可以帮助你使用--post-buffering选项,但它只是一个快捷方式,没有什么魔力。 – roberto

+0

感谢这个片段@roberto – asofyan

回答

2

这是uwsgi的错误。你可以从[uWSGI] Several bugs得到更多。

简单的解决方案是,您必须通过wsgi.input读取POST正文,即使POST正文为null或者您不需要POST params。

+0

这与uWSGI没有任何关系(它肯定不是bug)。关闭套接字而不读取数据,是一种错误的编程行为。 uWSGI可以帮助你(如果你不想改变你的代码)通过--post-buffering选项自动缓存后期数据。 – roberto

+0

@roberto谢谢。在uwsgi设置中添加后缓冲选项时,它可以工作。但是在某些情况下,例如,post请求没有参数,它不需要从wsgi.input中读取post主体。所以我不认为这是程序员的错误。 –

0

问题是“上游”(nginx正在处理的实际进程)正在关闭连接。

在我的情况下,Django是我的网络服务器,我需要将DATA_UPLOAD_MAX_NUMBER_FIELDS设置得更大,因为POST请求中的字段太多。

相关问题