Python Nginx反向代理POST请求背后的CherryPy已损坏/截断
我已经将使用Cherrypy 3.1.2的应用程序放在配置为反向代理的Nginx后面。 所有GET请求都正常工作,但所有POST请求都返回HTTP 400-格式错误的头 我追踪CherryPy WSGI服务器源代码以查看请求处理代码,并发现如果GET请求的第一行正确读取,例如:Python Nginx反向代理POST请求背后的CherryPy已损坏/截断,python,nginx,cherrypy,reverse-proxy,Python,Nginx,Cherrypy,Reverse Proxy,我已经将使用Cherrypy 3.1.2的应用程序放在配置为反向代理的Nginx后面。 所有GET请求都正常工作,但所有POST请求都返回HTTP 400-格式错误的头 我追踪CherryPy WSGI服务器源代码以查看请求处理代码,并发现如果GET请求的第一行正确读取,例如: GET /home HTTP/1.0 对于POST请求,它类似于: <HTTP headers truncated at front> POST /home HTTP/1.0 虽然尝试了许多其他的例子和
GET /home HTTP/1.0
对于POST请求,它类似于:
<HTTP headers truncated at front>
POST /home HTTP/1.0
虽然尝试了许多其他的例子和配置的代理_通过发现在网上
有没有办法找到问题的地方?Nginx配置、我的CherryPy应用程序还是其他
新建:我发现,它可以正常工作,但仅适用于正文内容长度为零的POST请求(设置为空,没有任何字段进行测试)。并验证从Beginning截断的字节数等于内容长度+一些小常量数(可能为2)。您可以尝试以下参数:
ignore_invalid_headers on;
sendfile on;
在http块中。。。还可以尝试禁用keepalives,并确保记录访问/错误以进行调试。即使是单个请求也会发生这种情况吗?如果为请求正文读取了错误的字节数,则在多个请求上保持有效性可能会出现问题,如果在Windows上使用文本模式IO而不是二进制(将CRLF序列更改为LF,抛出
内容长度
字节计数),则可能会发生这种情况。是,即使这是重新启动应用程序并重新加载Nginx后的第一个请求,也会发生这种情况。
ignore_invalid_headers on;
sendfile on;