Выдает 413 Request Entity Too Large при загрузке файла через веб интерфейс.
Директива в конфигах client_max_body_size 100m
Загружаю файл в 12 мб, из-за чего ошибка тогда?
Nginx работает, как фронтэнд к apache, возможно важно и стоит об этом упомянуть, но почему-то уверен, что проблема не в этом.
- Вопрос задан более трёх лет назад
- 17060 просмотров
В логах апача ошибок нет.
Ошибка только в логах nginx:
2012/06/07 20:03:13 [error] 2859#0: *23 client intended to send too large body: 13500621 bytes,
в php.ini upload_max_filesize и post_max_size имеют по 30m
В нем же и ошибка возникает при файлах в 10 мб и более.
(пилю проект в качестве восстановления пробелов в знаниях, т.к. самоучка)
upstream putit <
# Адрес back-end’a
server putit.ru:8080;
>
server <
listen 80;
server_name www.putit.ru putit.ru;
access_log /home/username/domains/putit.ru/logs/nginx_access.log;
error_log /home/username/domains/putit.ru/logs/nginx_error.log;
# Перенаправление на back-end
location / <
proxy_pass backend;
include /etc/nginx/proxy.conf;
>
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 16 16k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Предложение от 8host.com

Что такое Nginx?
Nginx – это быстрый и легкий веб-сервер, альтернатива Apache 2. Конечно же, как и любой сервер, для оптимальной производительности Nginx нуждается в тонкой настройке.
Требования
Для выполнения данного руководства понадобятся:
- новый сервер Debian 7. Чтобы получить инструкции по начальной настройке такого сервера, читайте данную статью.
- установленный и настроенный Nginx. Необходимые инструкции можно найти в статьях «
Директивы worker processes и worker connections
Первые переменные, которые нужно отладить, — worker processes и worker connections.
Директива worker_processes – основа работы Nginx. Она сообщает виртуальному серверу о запущенных рабочих процессах при подключении к правильному IP-адресу или порту. Как правило, на ядро запускается 1 рабочий процесс. Большее количество таких процессов не повредит систему, но может стать причиной простаивания процессов.
Чтобы определить необходимое количество процессов, которое нужно установить в worker_processes, просто посмотрите на количество ядер. Изменив размер сервера, не забудьте проверить количество ядер и соответствующим образом отредактировать значение директивы worker_processes. Чтобы узнать количество ядер, выполните команду grep на cpuinfo:
grep processor /proc/cpuinfo | wc -l
К примеру, если данная команда вернула значение 1, то это значение нужно внести в worker_processes.
Директива worker_connections сообщает директиве worker_processes, сколько пользователей могут одновременно обслуживаться Nginx. Значение по умолчанию – 768. Однако, учитывая, что каждый браузер обычно открывает, по крайней мере, 2 соединения, этого может быть недостаточно. Именно поэтому нужно настроить worker_connections на полную силу. Чтобы проверить ограничения ядра, используйте команду ulimit:
На небольшом сервере (512 Мб) данное значение ограничивается 1024, чего вполне достаточно для начала.
Теперь нужно обновить конфигурационный файл:
sudo nano /etc/nginx/nginx.conf
worker_processes 1;
worker_connections 1024;
Запомните: количество клиентов, которые могут быть обслужены, можно умножить на количество ядер. В этом случае можно обслуживать1024 клиентов в секунду. В дальнейшем это значение уменьшает директива keepalive_timeout.
Буферы
Размер буфера – следующий невероятно важный аспект, который требует тонкой настройки. Если размер буфера слишком мал, то Nginx придется писать во временный файл, из-за чего диску придется постоянно считывать и записывать. Прежде чем принимать какое-либо решение, нужно учесть некоторые директивы.
client_body_buffer_size: данная директива обрабатывает размер буфера клиента, то есть любые POST-запросы, отправленные на Nginx.
client_header_buffer_size: эта директива подобна предыдущей, только вместо размера буфера она обрабатывает размер заголовка клиента. Для всех целей 1K, как правило, достаточно.
client_max_body_size: максимально допустимый размер запроса клиента. Если максимальный размер превышен, то Nginx выведет ошибку 413 (Request Entity Too Large).
large_client_header_buffers: максимальное количество и размер буферов больших заголовков клиентов.
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
Время ожидания
Лимит времени ожидания может также резко повысить производительность.
Директивы client_body_timeout и client_header_timeout отвечают за интервал времени, на протяжении которого сервер будет ждать тело запроса или заголовок запроса от клиента. Если ни тело или заголовок не были получены, сервер выдаст ошибку 408 (Request time out).
Директива keepalive_timeout устанавливает лимит времени ожидания Keep-Alive соединения с клиентом. Проще говоря, Nginx закроет соединения с клиентом по истечении этого периода времени.
Директива send_timeout ограничивает время ответа клиенту. Она устанавливается не на всю передачу ответа, а только на две операции чтения; если по истечении этого времени клиент ничего не примет, то Nginx прервет соединение.
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
Сжатие Gzip
Gzip поможет уменьшить количество передач, выполняемых Nginx. Однако, будьте осторожны: установив слишком большое значение gzip_comp_level, сервер начнет расходовать циклы процессора.
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
Кэширование статических файлов
Можно также настроить выдачу заголовков Expires для файлов, которые не меняются и обслуживаются регулярно. Эту директиву можно добавить к существующему блоку server Nginx.
* .(jpg|jpeg|png|gif|ico|css|js)$ <
expires 365d;
>
Не забудьте добавить необходимые типы файлов в вышеприведенную строку (и удалить ненужные).
Журналирование
Nginx вносит в лог каждый поступивший запрос. При использовании аналитики для мониторинга этого поведения, возможно, потребуется отключить эту функцию. Для этого просто измените директиву access_log:
Сохраните и закройте файл, а затем запустите:
sudo service nginx restart
Итоги
По большому счёту, правильная настройка сервера требует постоянного мониторинга и отладки. Ни одна из выше установленных переменных не закреплена навечно. Запомните: настройки сервера нужно адаптировать согласно каждому уникальному случаю. В дальнейшем может понадобиться увеличить производительность сервера при помощи балансировки нагрузки и горизонтального масштабирования.
nginx keeps saying client intended to send too large body . Googling and RTM pointed me to client_max_body_size . I set it to 200m in the nginx.conf as well as in the vhost conf , restarted Nginx a couple of times but I’m still getting the error message.
Did I overlook something? The backend is php-fpm ( max_post_size and max_upload_file_size are set accordingly).

12 Answers 12
Following nginx documentation, you can set client_max_body_size 20m ( or any value you need ) in the following context:
NGINX large uploads are successfully working on hosted WordPress sites, finally (as per suggestions from nembleton & rjha94)
I thought it might be helpful for someone, if I added a little clarification to their suggestions. For starters, please be certain you have included your increased upload directive in ALL THREE separate definition blocks (server, location & http). Each should have a separate line entry. The result will like something like this (where the . reflects other lines in the definition block):
(in my ISPconfig 3 setup, this block is in the /etc/nginx/nginx.conf file)
(in my ISPconfig 3 setup, these blocks are in the /etc/nginx/conf.d/default.conf file)
Also, make certain that your server’s php.ini file is consistent with these NGINX settings. In my case, I changed the setting in php.ini’s File_Uploads section to read:
Note: if you are managing an ISPconfig 3 setup (my setup is on CentOS 6.3, as per The Perfect Server), you will need to manage these entries in several separate files. If your configuration is similar to one in the step-by-step setup, the NGINX conf files you need to modify are located here: