2012-05-01 69 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請求中的字段太多。

相關問題