Nginx игнорирует client_max_body_size - PullRequest
1 голос
/ 29 января 2012

По какой-то причине размещение client_max_body_size 16M; в моем файле nginx.conf не имеет никакого эффекта - я все еще получаю ошибку HTTP 413 при попытке загрузить изображения на мой веб-сервер.Я перезапускал Nginx после каждого изменения в файле конфигурации и пытался поместить директиву client_max_body_size в блок location {}, в блок server {} и в блок http {}.Я даже попробовал все три одновременно.

При поиске ответа на этот вопрос кто-то предложил поискать строки client_max_body_size в других файлах конфигурации, например, proxy.conf, которых у меня нет.

Моя конфигурация Nginx - ничтоособенное - просто добавление соединения к группе Rainbows (Unicorns), работающей на порте 8080.

Я пытаюсь загрузить jpg-файл размером 4.5 Мб с Nginx 1.0.5 в Ubuntu 11.10.Любая идея, почему это не работает?

ОБНОВЛЕНИЕ:

Кажется, один (?) Из рабочих Rainbows перезапускается каждые 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 ]

2 голосов
/ 11 февраля 2012

Я наконец решил эту проблему с помощью коллеги. Оказывается, проблема была в том, что я неправильно настроил Rainbows (Unicorn). Помимо указания максимального размера тела в конфиге Nginx, я также должен был указать его в своем конфиге Rainbows. Я пытался сделать вызов в client_max_body_size в моем конфиге Rainbows, но это не сработало. Оказывается, звонок client_max_body_size должен быть помещен в радугу! блок так:

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

Проблема решена. Теперь я могу загрузить файлы 4 и 5 МБ без проблем. Спасибо всем!

0 голосов
/ 29 января 2012

Бит, который ты сказал, ничего особенного, на самом деле. Убедитесь, что процесс Unicorn может записывать файлы в / tmp - все, что превышает определенный размер, записывается на диск, а не хранится в памяти. Поэтому убедитесь, что он может создавать временные файлы. Подробности смотрите в tmpio.rb в Unicorn.

Также убедитесь, что у вас есть client_max_body_size в http {} и больше нигде.

...