Ada*_*nia 8 python reverse-proxy nginx cherrypy
我使用Cherrypy 3.1.2将我的应用程序置于Nginx后面,配置为反向代理.All都适用于GET请求,但所有POST请求都返回HTTP 400 - 格式错误的标头.
我追溯到CherryPy WSGI-Server源代码以查看请求处理代码,并发现如果对于GET请求,第一个请求行正确读取,例如:
GET /home HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
对于POST请求,它就像:
<HTTP headers truncated at front>
POST /home HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
因此,对于包含GET/POST请求行后跟HTTP标头的正确形成的请求,对于我的应用程序从Nginx接收的POST请求,
此外,从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;
}
}
Run Code Online (Sandbox Code Playgroud)
尽管在网上找到了很多其他的proxy_pass示例和配置.
任何想法在哪里寻找问题?Nginx配置,我的CherryPy应用程序还是其他地方?
新:我发现,它工作正常,但仅适用于具有零主体内容长度的POST请求(在没有任何字段的情况下为空测试).
并验证从开始截断的字节数等于Content-length +一些小的const数(可能是2).
你可以尝试一下参数:
ignore_invalid_headers on;
sendfile on;
Run Code Online (Sandbox Code Playgroud)
在http块中...也可以尝试禁用keepalives并确保您正在记录访问/错误以进行调试。
归档时间: |
|
查看次数: |
4208 次 |
最近记录: |