2012-01-29 97 views
1

出于某种原因,将client_max_body_size 16M;放入我的nginx.conf文件中没有任何影响 - 当我尝试将图像上传到我的web服务器时,仍然收到HTTP 413错误。在每次更改配置文件后,我都重新启动了Nginx,并且我试着将client_max_body_size指令放在位置{}块,服务器{}块和http {}块中。我甚至同时尝试了这三种。Nginx忽略client_max_body_size

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

我的Nginx的配置是没有什么特别的 - 只是上游化8080

我想上传一个4.5MB JPG文件,运行Nginx的1.0.5上运行在端口一束彩虹(独角兽)的连接Ubuntu 11.10。任何想法为什么这不起作用?

UPDATE:(?)

好像一个彩虹工人每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>' 

回答

0

你说的那点没什么特别的,实际上是。确保Unicorn进程可以在/ tmp中写入文件 - 超过一定大小的任何内容都将写入磁盘,而不是保存在内存中。所以确保它可以创建临时文件。详情请参阅Unicorn中的tmpio.rb。

此外,请确保您在http {}以及其他地方都有client_max_body_size。

+0

感谢您的回复!/tmp的权限是777世界可写的,我将Nginx配置更改为仅在http {}下具有'client_max_body_size'。不幸的是,它仍然无法正常工作。在上传过程中观看/ tmp的'ls'不会显示任何新创建的内容。我还可以检查以确保Unicorn可以访问/ tmp吗? – Cameron 2012-01-29 08:43:40

+1

检查你可以自己发布到独角兽。将nginx从等式中取出一点。 Unicorn将自己呈现为HTTP,因此可以直接访问它。 – Lee 2012-01-29 08:50:09

+0

嗯!好建议。我看到其他很奇怪的问题。在Chrome开发人员工具(直接连接到Unicorns)中查看请求/响应时,请求立即失败,但实际上并未给出错误代码。/add_image请求变成红色,但好像失败了一样。还有一些其他的内容:显示空白条目,只有标题信息,另一个看起来像base64编码的PNG文件(我正在上传一个jpg)。很奇怪。有没有其他的独角兽设置我错过了? Sendfile或类似的东西? – Cameron 2012-01-29 09:04:00

2

我终于在同事的帮助下解决了这个问题。原因是我没有正确配置彩虹(独角兽),所以发生了问题。除了在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文件而没有问题。感谢大家!