Nginx流标头

时间:2014-04-24 06:00:32

标签: python http nginx

我有一个简单的http服务器,我想在正文之前向客户端发送一些标题,因为内容的生成需要很长时间(超过n秒)。

例如:

HTTP 200 OK header->SOME CUSTOM HEADERS->SOME LONG OPERATION
->Content-Length->\n\n->BODY

如果服务器没有响应,有些客户端设备会在5秒左右后关闭。 在源代码中有一个对象" wfile"(套接字描述符,类文件对象)。 wfile.flush()将内容发送到客户端。在标准情况下,一切正常。 HTTP连接服务于nginx服务器。并且nginx从后端等待整个响应。有没有办法去冲洗"后端输出数据? 配置:


location / {
  #                proxy_set_header X-Real-IP $remote_addr;
                  #sendfile_max_chunk 0;
                  proxy_buffering off;
                  sendfile off;
                  proxy_pass srv;
          }
  #        server_tokens off;
  }

<!-- language: lang-python -->
from SocketServer import ThreadingMixIn, TCPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

class MyHandler(SimpleHTTPRequestHandler):
    def do_Get(self):
        self.wfile.write("HERE SOME HEADER\n")
        self.wfile.flush()
        #---HERE SOME LONG BLOCKING OPERATION
        content = blocking_operation()
        #HERE Content-length header generation etc.
        ...

class SimpleSrv(ThreadingMixIn, TCPServer):
    allow_reuse_address = True

....
httpd = SimpleSrv((ip, port), MyHandler)
httpd.serve_forever()

1 个答案:

答案 0 :(得分:0)

默认情况下,nginx缓冲响应此类响应,您可以通过nginx配置选项禁用此行为 proxy_buffering 或者从后端发送“X-Accel-Buffering”标题。