Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 在nginx中禁用请求缓冲_File Upload_Nginx_Asyncfileupload_Gevent - Fatal编程技术网

File upload 在nginx中禁用请求缓冲

File upload 在nginx中禁用请求缓冲,file-upload,nginx,asyncfileupload,gevent,File Upload,Nginx,Asyncfileupload,Gevent,nginx似乎会在将请求传递到updstream服务器之前对其进行缓冲,而在大多数情况下,这对我来说是正常的,但这非常糟糕:) 我的情况是这样的: 我将nginx作为前端服务器,代理3台不同的服务器: apache与一个典型的php应用程序 shaveet(一个开源comet服务器)由我用python和gevent构建 使用gevent再次构建的文件上载服务器,该服务器将上载代理到rackspace cloudfiles 在接受来自客户端的上载时 #3是问题所在,现在我遇到的是,nginx缓冲所

nginx似乎会在将请求传递到updstream服务器之前对其进行缓冲,而在大多数情况下,这对我来说是正常的,但这非常糟糕:)

我的情况是这样的:

我将nginx作为前端服务器,代理3台不同的服务器:

  • apache与一个典型的php应用程序
  • shaveet(一个开源comet服务器)由我用python和gevent构建
  • 使用gevent再次构建的文件上载服务器,该服务器将上载代理到rackspace cloudfiles 在接受来自客户端的上载时
  • #3是问题所在,现在我遇到的是,nginx缓冲所有请求,然后将其发送到文件上传服务器,文件上传服务器反过来将其发送到cloudfiles,而不是在收到数据块时发送每个数据块(这些数据块使上传速度加快,因为我可以将6-7MB/s的数据块推送到cloudfiles)


    我使用nginx的原因是要有3个不同的域和一个IP,如果我不能做到这一点,我将不得不将fileupload服务器移动到另一台机器上。

    我会研究haproxy来满足这一需求

    根据,他们建议您使用nginx来实际缓冲客户端并防止slowloris攻击。因此,这种缓冲可能是一件好事。然而,在我提供的链接中,我确实看到了一个关于删除代理缓冲区的选项,不清楚这是否在nginx中,但看起来好像是这样。当然,这是假设你有Gunicorn在运行,而你没有。也许它对你仍然有用

    编辑:我做了一些研究,nginx中的缓冲区禁用是针对出站的长轮询数据。Nginx在其站点上声明,入站请求在向上游发送之前必须进行缓冲

    “请注意,当使用HTTP代理模块(或甚至使用FastCGI)时,整个客户端请求将在传递到后端代理服务器之前在nginx中进行缓冲。因此,如果上载进度表通过测量后端服务器接收的数据来工作,则无法正常工作。”


    一旦实现了这个[1]特性,Nginx就能够充当反向代理,而无需缓冲上传(bug客户端请求)。 它应该降落在1.7,这是目前的主线

    [1]

    更新

    此功能自1.7.11起通过标志提供

    proxy_request_buffering on | off


    自版本nginx-1.7.11起,现在可在nginx中使用

    见文件

    要禁用缓冲上载,请指定

    proxy_request_buffering off;
    

    每个人都知道,根据#nginx和#lighttpd中的ppl,不可能同时在这两个服务器上禁用请求缓冲:(对于您的#3,您是否使用gevent<1.0中内置的http服务器支持?最新的gevent没有http支持,只有wsgi,所以我想知道该使用什么。我想我可以使用Django…如果您可以为服务器分配多个IP,那么就可以将专用上载服务器绑定到第二个IP。结果是,您需要单独的主机名来进行备份。)这可能会导致客户端上出现跨域策略问题。HA代理不支持SSL,其他原因是AFAIK it仅在保持活动会话中处理第一个请求的头。2015年3月24日发布的1.7.11版提供了此功能