[英]Serving multiple websocket clients from a reverse-proxy nginx server
[英]CherryPy behind Nginx reverse-proxy POST requests corrupted/truncated
我已經將使用Cherrypy 3.1.2的應用程序放在配置為反向代理的Nginx之后。 一切都對GET請求有效,但是所有POST請求都返回HTTP 400-格式錯誤的標頭。
我跟蹤到CherryPy WSGI-Server源代碼以查看請求處理代碼,發現對於GET請求,如果第一個請求行正確讀取,例如:
GET /home HTTP/1.0
對於POST請求,就像:
<HTTP headers truncated at front>
POST /home HTTP/1.0
因此,不是我的應用程序從Nginx接收到的POST請求,而不是包含GET / POST請求行和HTTP標頭的格式正確的請求:
此外,從p.1開始的截斷字節數似乎取決於表單上的POST數據量,例如,我在/ home FORM字段中鍵入的字符越多,HTTP標頭中刪除的字符就越多。
顯然,Nginx將標頭傳遞給上游服務器(我的應用程序)時,它以某種方式破壞了標頭。
但是:當我只是為了進行測試時,使Nginx重定向到某些外部網站(也使用POST請求)-一切正常。
所以我現在很困。
我的配置是:Windows XP Prof,Python / 2.5.1,CherryPy / 3.1.2,Nginx / 0.8.32
瀏覽器:FireFox 2.0,IE 7.0
我的應用程序(獨立運行)通常可以在多種配置下運行和測試。
我使用非常基本的Nginx配置,例如:
upstream backend {
server localhost:8088 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
#proxy_read_timeout 300;
proxy_pass http://backend;
#proxy_redirect default;
}
}
盡管嘗試過許多在網上找到的proxy_pass的其他示例和配置。
有什么想法可以找到問題嗎? Nginx配置,我的CherryPy應用程序還是其他地方?
新:我發現,它可以正常運行,但僅適用於正文內容長度為零的POST請求(將其為空,沒有任何字段可對其進行測試)。
並驗證了從開始處被截斷的字節數等於Content-length +一些小的const數字(可能為2)。
您可以嘗試參數:
ignore_invalid_headers on;
sendfile on;
在http塊中...也可以嘗試禁用keepalive並確保您記錄訪問/錯誤以進行調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.