Nginx忽略了client_max_body_size

时间:2012-01-29 07:40:28

标签: ruby-on-rails upload nginx unicorn

出于某种原因,将client_max_body_size 16M;放入我的nginx.conf文件中无效 - 当我尝试将图像上传到我的网络服务器时,我仍然收到HTTP 413错误。我在每次更改配置文件后重新启动了Nginx,并且我尝试将client_max_body_size指令放在location {}块,server {}块和http {}块中。我甚至同时尝试了这三个。

在寻找答案时,有人建议在其他配置文件中查找client_max_body_size行,例如proxy.conf,我没有。

我的Nginx配置没有什么特别之处 - 只需连接到端口8080上运行的一堆Rainbows(Unicorns)。

我正在尝试上传一个4.5mb jpg文件,在Ubuntu 11.10上运行Nginx 1.0.5。知道为什么这不起作用吗?

更新:

似乎一个(?)的彩虹工人每30秒重新启动一次。这是rainbows.stderr.log的输出:

E, [2012-01-29T17:27:05.977487 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)  
E, [2012-01-29T17:27:05.978011 #25218] ERROR -- : retrying in 0.5 seconds (4 tries left)  
E, [2012-01-29T17:27:06.478767 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)  
E, [2012-01-29T17:27:06.478964 #25218] ERROR -- : retrying in 0.5 seconds (3 tries left)  
E, [2012-01-29T17:27:06.979509 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)  
E, [2012-01-29T17:27:06.979650 #25218] ERROR -- : retrying in 0.5 seconds (2 tries left)
E, [2012-01-29T17:27:07.480190 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)
E, [2012-01-29T17:27:07.480353 #25218] ERROR -- : retrying in 0.5 seconds (1 tries left)  
E, [2012-01-29T17:27:07.980809 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)  
E, [2012-01-29T17:27:07.980987 #25218] ERROR -- : retrying in 0.5 seconds (0 tries left)  
E, [2012-01-29T17:27:08.481638 #25218] ERROR -- : adding listener failed addr=0.0.0.0:8080 (in use)  
/usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/socket_helper.rb:144:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/socket_helper.rb:144:in `new'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/socket_helper.rb:144:in `bind_listen'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:222:in `listen'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:733:in `block in inherit_listeners!'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:733:in `each'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:733:in `inherit_listeners!'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:121:in `start'
from /usr/local/forrager/shared/bundle/ruby/1.9.1/gems/rainbows-4.3.1/bin/rainbows:122:in `<top (required)>'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/bin/rainbows:19:in `load'  
from /usr/local/forrager/shared/bundle/ruby/1.9.1/bin/rainbows:19:in `<main>'  

2 个答案:

答案 0 :(得分:2)

我终于在同事的帮助下解决了这个问题。事实证明问题正在发生,因为我没有正确配置彩虹(Unicorn)。除了在Nginx配置中指定最大主体大小外,我还应该在我的Rainbows配置中指定它。我以前试过在我的Rainbows配置中调用client_max_body_size,但是没有用。事实证明,client_max_body_size电话应放在彩虹中!块如此:

Rainbows! do
  client_max_body_size(16 * 1024 * 1024) # 16 megs
end

问题解决了。我现在可以上传4和5mb文件,没有任何问题。谢谢大家!

答案 1 :(得分:0)

你说的那个没什么特别的,实际上是。确保Unicorn进程可以写入/ tmp中的文件 - 超过一定大小的任何内容都写入磁盘而不是保存在内存中。因此,请确保它可以制作临时文件。有关详细信息,请参阅Unicorn中的tmpio.rb。

另外,请确保在http {}下面有client_max_body_size,而不是其他地方。