В редких случаях, но бывает, что во время загрузки больших файлов на веб-сайт возникает ошибка, которую возвращает веб-сервер Nginx — 413 Request Entity Too Large. Ошибка появляется, при попытке загрузить на сервер слишком большой файл чем это разрешено на сервере. Дальше рассмотрим описание ошибки 413 Request Entity Too Large а также методы её исправления на стороне веб-сервера Nginx.
Что означает ошибка 413
Ошибка 413 или Request Entity Too Large расшифровывается как «объект запроса слишком велик» или простыми словами объем передаваемых данных слишком большой. Ошибка возвращается в случае, если сервер не может обработать запрос по причине слишком большого размера тела запроса (или большого файла). Снимок экрана с ошибкой изображен ниже:
По умолчанию в Nginx установлен лимит на размер тела запроса который равен 1 МБ. Если запрос превышает установленное значение, вы увидите ошибку 413 Request Entity Too Large.
Как исправить
Для исправления ошибки 413 следует увеличить допустимый лимит. Увеличить размер тела запроса и соответственно, загружаемых файлов, можно путем использования client_max_body_size. Опциюя доступна для использования в директивах http, server или location в конфигурационном файле /etc/nginx/nginx.conf или в конфигурационном файле веб-сайта.
Откройте конфигурационный файл nginx.conf при помощи любого текстового редактора:
$ sudo nano /etc/nginx/nginx.conf
Вписываем строчку в секцию http:
$ client_max_body_size 100M
100 — максимальный размер файла в мегабайтах который можно загрузить на веб-сайт, в данном случае — 100 мегабайт. Если в распоряжении имеется несколько веб-сайтов и необходимо ограничить загрузку на все сайты сразу, то строку client_max_body_size необходимо вписываем в раздел блока http. Если ограничение на загрузку необходимо выставить только для конкретного сайта, то строку client_max_body_size необходимо добавить в блок server конфигурационного файла сайта, который по умолчанию находиться в /etc/nginx/sites-available/имя_файла_с_конфигурацией:
Когда ограничение на загрузку необходимо выставить только для конкретного раздела на сайте, строку client_max_body_size необходимо вписать в директиву location конфигурационного файла сайта, который по умолчанию находиться в /etc/nginx/sites-available/имя_файла_с_конфигурацией:
Как только были внесены изменения в конфигурационные файлы, сохраните их, закройте текстовый редактор и проверьте синтаксис конфигурационных файлов на наличие ошибок при помощи команды:
$ sudo nginx -t
Вы можете увидеть следующие строки:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Это означает что ошибок нет. В противном случае будет выведено описание ошибки, имя файла в котором найдена ошибка и номер строки. После внесения любых изменений в конфигурационные файлы Nginx их необходимо перезапустить при помощи команды:
$ sudo systemctl reload nginx
В этой статье рассмотрена ошибка в Nginx, известная 413 Request Entity Too Large, возникающая при загрузке больших файлов на веб-сайт. Помимо описания самой ошибки также было описаны шаги по устранению ошибки путем редактирования конфигурационных файлов Nginx.
При работе с Chrome или Edge вы можете столкнуться с ошибкой HTTP 413. Вы можете получить сообщение об ошибке, объект запроса слишком велик или ваш клиент выдал вместе с ним слишком большой запрос. Что это за ошибка и как ее исправить? Читайте дальше, чтобы узнать больше об этой ошибке.
Появляется код ошибки HTTP 413 вместе с сообщением об ошибке: Ваш клиент выдал слишком большой запрос. Как говорится в сообщении об ошибке, этот код ошибки появляется, когда размер запроса клиента превышает размер файла сервера. При попытке загрузить большой файл на веб-сервер может появиться эта ошибка, чтобы предупредить клиента об ограничении размера.
Почему появляется ошибка HTTP 413?
Ниже приведены возможные причины этой ошибки.
- Ограниченное пространство для хранения на веб-серверах:
Веб-серверы поставляются с ограничениями на объем памяти. Большие файлы, если они загружены на сервер, могут превысить разрешения на хранение сервера, а также перегрузить сервер. Размер загружаемого файла по умолчанию составляет 49 КБ (49152 байта). Следовательно, эта ошибка возникает, чтобы клиенты не загружали файлы большого размера на сервер. Приложение получает указанную выше ошибку, когда пользователь пытается загрузить файл размером более 49 КБ.
- Тело запроса не загружено предварительно:
Ошибка HTTP 413 возникает для сайтов SSL, когда тело запроса не загружается предварительно во время процесса установления связи SSL.
Чтобы предотвратить эту ошибку, вы можете уменьшить размер загружаемого файла, и эта ошибка будет исправлена. Но иногда вам также может потребоваться внести некоторые изменения на стороне сервера, чтобы изменить ограничение размера файла.
Как исправить ошибку HTTP 413?
Ниже приведены некоторые решения, которые вы можете использовать для исправления ошибки HTTP 413.
- Использование атрибута uploadReadAheadSize для увеличения размера файла на стороне сервера
- Использование параметра maxRequestEntityAllowed для увеличения размера файла на стороне сервера
- Использование атрибута MaxReceivedMessageSize для увеличения размера файла на стороне сервера
- Изменение файла PHP.ini для увеличения размера загрузки PHP
Давайте посмотрим, как применить эти решения.
1]Использование атрибута uploadReadAheadSize для увеличения размера файла на стороне сервера
Одно из первых решений, которое вы можете попробовать, — это увеличить ограничение размера загрузки на веб-серверах. Для этого используйте параметр uploadReadAheadSize в файлах applicationHost.config и web.config, чтобы управлять ограничением размера файла.
загрузитьReadAheadSize является необязательным атрибутом модуля. Он указывает количество байтов, которые веб-сервер будет считывать в буфер и передавать в расширение или модуль ISAPI. Это происходит один раз для каждого запроса клиента. Расширение или модуль ISAPI получает любые дополнительные данные непосредственно от клиента. Значение должно находиться в диапазоне от 0 до 2 147 483 647. Значение по умолчанию для этого параметра — 49 152.
Ниже приведены шаги для изменения значения параметра uploadReadAheadSize:
- Откройте диспетчер IIS.
- Выберите сайт.
- Дважды щелкните Редактор конфигурации.
- Выберите веб-сервер, а затем serverRuntime.
- Изменить uploadReadAheadSize
- Нажмите
2]Использование параметра maxRequestEntityAllowed для увеличения размера файла на стороне сервера
Еще один способ увеличить лимит размера файла на стороне сервера — изменить параметр maxRequestEntityAllowed. Этот параметр указывает максимально допустимое количество байтов в теле запроса.
Обратите внимание, что этот параметр был назван Аспмаксрекуестентититиаллоуедв версиях до IIS 7.0.
Вы можете изменить параметр maxRequestEntityAllowed с помощью appcmd. Для этого выполните следующие шаги.
appcmd set config/section:asp/maxRequestEntityAllowed:int
Переменная int представляет собой максимально допустимое количество байтов во всем теле запроса ASP. Значение по умолчанию — 200 000 байт.
3]Использование атрибута MaxReceivedMessageSize для увеличения размера файла на стороне сервера
Если вышеупомянутые решения не работают, вы можете попробовать изменить параметр MaxReceivedMessageSize, чтобы устранить ошибку HTTP 413.
Иногда вы можете получить следующую ошибку в дополнение к ошибке HTTP 413.
Превышена квота на максимальный размер входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize соответствующего элемента привязки.
Как упоминалось в сообщении об ошибке, эта проблема возникает, когда размер файла запроса больше, чем MaxReceivedMessageSize для WCF.
Эту ошибку можно устранить, увеличив значение MaxReceivedMessageSize для веб-службы. Однако при внесении этих изменений может потребоваться изменить два разных параметра MaxReceivedMessageSize. Они заключаются в следующем.
- MaxReceivedMessageSize в System.ServiceModel.Configuration.BasicHttpBindingElement
- MaxReceivedMessageSize в System.ServiceModel.Channels.HttpTransportBindingElement
В таком случае, можешь попробовать следующие настройки:
- Конфигурация для увеличения MaxReceivedMessageSize в ServiceModel.Configuration.BasicHttpBindingElement
- Конфигурация для увеличения MaxReceivedMessageSize в ServiceModel.Channels.HttpTransportBindingElement
4]Изменение файла PHP.ini для увеличения размера загрузки PHP
Иногда вам может потребоваться устранить ошибку HTTP 413, изменив ограничение размера загрузки файла PHP. Ограничение размера загрузки по умолчанию на серверах составляет 2 МБ. Файл конфигурации PHP (php.ini) можно изменить для увеличения или даже уменьшения размера загружаемого файла. Вы можете найти этот файл конфигурации в разных местах в разных дистрибутивах Linux. Ниже указано расположение этого файла.
- Расположение в Cent, RHEL и Fedora: # vim /etc/php.ini
- Расположение в Debian и Ubuntu: #vim /etc/php/7.0/apache2/php.ini
В PHP можно увеличить размер загружаемого файла, изменив параметры upload_max_filesize (10M) и post_max_size (10M) в файле php.ini. Кроме того, вы можете контролировать максимально допустимое количество файлов, которые могут быть загружены в одном запросе, изменив параметр max_file_uploads. По умолчанию это ограничение равно 25.
Таким образом, измените значения следующих параметров:
- max_execution_time (максимальное время загрузки в секундах)
- upload_max_filesize (максимальный размер загружаемого файла в мегабайтах)
- post_max_size (максимальный размер сообщения в мегабайтах)
Вышеупомянутые решения могут помочь вам эффективно справиться с ошибкой HTTP 413. Дайте нам знать ваши отзывы об этих решениях.
Как исправить ошибку 413 в Chrome или Edge?
Теперь это ошибка на уровне сервера, и вы, как конечный пользователь, ничего не можете сделать, кроме как выполнить следующие предложения:
- Проверьте распространенные проблемы с браузером в Chrome: вы можете решить распространенные проблемы в Chrome, очистив данные браузера и очистив сокет.
- Сброс Chrome до заводских настроек. Иногда возврат к заводским настройкам решает многие проблемы. Попробуйте также это решение для устранения ошибки HTTP 413.
- Проверьте сетевой адаптер: сброс настроек сетевого адаптера также помогает устранить ошибку.
Если эти 3 решения не работают, обратитесь к администратору сервера или веб-сайта и сообщите ему или ей об этой ошибке.
Как вы справляетесь со слишком большой полезной нагрузкой 413?
Ошибка 413 Payload too big аналогична ошибке HTTP 413. Обе эти ошибки означают, что размер загружаемых файлов превышает разрешенный размер на серверах.
Данная ошибка больше интересует вебмастеров, т.к. связана напрямую с настройками сервера и nGinx. В статье исчерпывающая информация по данной ошибке с разбором действий по устранению ошибки 413. В каких случаях возникает ошибка 413? Как исправить ошибку 413 в сжатые сроки? Опыт вебмастеров, которые решили проблему.
Что такое ошибка HTTP 413?
Ошибка 413 — Request Entity Too Large говорит о том, что файл, который вы пытаетесь загрузить на сервер слишком большой для заданной конфигурации сервера. Обычно проблема возникает среди вебмастеров, которые создают свой первый сайт на базе CMS и при этом вообще не разбираются в коде. Как результат – не настроен сервер для обработки и загрузки изображений.
Обратите внимание, что в отличии от ошибки 409, здесь указана конкретная проблема. Здесь нет конфликта между настройками сервера. Нужно просто изменить переменные в настройках, если они доступны для вас в панели управления вашим хостинг аккаунтом.
Вебмастера могут столкнуться с ошибкой 413 Request Entity Too Large при использовании: NGINX, Apache, PHP. Чтобы устранить ошибку 413 нужно внести изменения в настройки, которые приведены ниже. Для этого вам понадобиться доступ к настройкам сервера или придется писать в поддержку хостинга, чтобы они внесли такие изменения (если вам не доступно).
По умолчанию, размер, который разрешен для загрузки – 1 мб. У меня на всех сайтах стоит 32 мб. Для пользователей размер установлен в рамках 4 мб., при этом в случае загрузки изображений на сайт, система автоматически их сжимает. Ниже представлены функции и их местонахождение.
Если у вас NGINX
В дефолтных (стандартных) настройках стоит ограничение в 1 мб. За размер отвечает функция «client_max_body_size». Данная настройка указывает допустимый размер запроса в строке «Content-Length». В случае, когда размер больше 1 мб., возвращается ошибка 413 Request Entity Too Large.
Для решения ищем файл «nginx.conf», а в нем пункт http, где нужно добавит или изменить указанный выше размер функции. Исправляем ошибку 413 примерно вот так:
server {
…
client_max_body_size 64m;
…
}
В данном случае – 64м, это уже измененный допустимый размер, который ранее был 1м. Слишком много не стоит устанавливать, если в этом нет нужды. Почему? Уже не первый раз замечаю, что при больших объемах затрачивается много оперативной памяти и процессорных минут, что может привести к «диалогу» с администрацией хостинга. После установки параметров не забудьте перезагрузить конфиг.
Если у вас PHP
Не всегда все упирается в настройки сервера, но и в настройки PHP. Вне зависимости от версии PHP для изменения допустимого размера загружаемых фалов через PHP скрипты нужно найти файл php.ini. Этот файл обычно находится в папке «etc». Открываем встроенным редактором (если есть) или текстовым редактором, вроде Notepad++. Ищем строки, которые указаны ниже:
Upload_max_filesize
Post_max_size
И устанавливаем в этих строках нужные вам размеры. Например, 8М – это и есть 8 мб. Для скриптов крайне противопоказано устанавливать разрешения на загрузку больших файлов. Также не стоит разрешать загружать произвольные файлы. В случае, если сайтом заинтересован злоумышленник, он легко сможет залить файлы на сайт, которые вам не понравятся.
Если у вас Apache
В отличии от примеров выше, в Apache размер указывается в байтах. Файл для редактирования находится по следующему адресу: /etc/httpd/conf/httpd.conf или /etc/apache/apache.conf. В файле нужно найти и изменить пункт «LimitRequestBody. Ниже пример.
LimitRequestBody 1048576
В данной строчке лимит, который вы задаете – 1048576 или 8 МБ. Никаких букв после цифр ставить не нужно.
Для пользователей
Если вы загружаете фотографию или аватарку на сайт и он выдает ошибку 413, вы решить этот вопрос не сможете, разве только уменьшив размер файла. Помните, что стандартный размер – 1 мб, а значит, если сайт не принимает ваше фото или файл, просто уменьшите его до 1 Мб.
При загрузке файла в свой блог, столкнулся с ошибкой «413 Request Entity Too Large». Быстрое гугление показало, что для исправления, нужно чуть поднастроить веб-сервер..
Что означает ошибка «413 Request Entity Too Large»
Ошибка «413 Request Entity Too Large» переводится как «Размер запроса слишком большой» возникает когда размер запроса от клиента превышает максимальные ограничения установленные для обработки на стороне веб-сервера. Такие ограничение применяют для защиты от атак направленных на увеличение нагрузки на веб-сервер.
Например, в моем случае, я попытался загрузить gif-ку размер которой был около 2 мб. Соответственно мой браузер отправил POST запрос на веб-сервер, примерно такого же размера. В результате я получил ошибку «Request entity too large» от веб-сервера, о том, что мой запрос слишком большой для дальнейшей обработки.
Как исправить ошибку «413 Request Entity Too Large» со стороны клиента
Самый простой способ, это уменьшить размер запроса. Тут многое зависит от того, что именно вы отправляете на сервер.
Если это форма с несколькими файлами, попробуйте загружать файлы по одному.
Если это какие-то документы и есть возможность, попробуйте их заархивировать.
Если это картинка, попробуйте её сохранить в другом формате, например уменьшить разрешение и сохранить в JPG.
У Вас Jpeg
Как исправить ошибку «413 Request Entity Too Large» на стороне Nginx веб-сервера
Разумеется, можно поправить конфигурацию веб-сервера, если у вас есть к ней доступ, чтобы избежать таких ошибок в дальнейшем.
В nginx, за это отвечает опция client_max_body_size: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
Значение по-умолчанию: 1Мб
Данную опцию можно использовать в следующих контекстах: http, server, location. Т.е. можно задать глобальное значение, значение для домена и значение для конкретного адреса url.
Я решил увеличить глобальное значение, т.к. это исправит проблему сразу для нескольких блогов, расположенных в рамках одного сервера.
Для этого добавляем нужное значение (в моем случае это 16 Мб) в главный файл конфигурации
$ sudo nano /etc/nginx/nginx.conf ... http { ... client_max_body_size 16M; .... } |
далее, проверяем конфигурацию и перезапускаем nginx
$ sudo nginx —t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful $ sudo nginx —s reload |
Пример конфигурации в других контекстах
server { client_max_body_size 1m; location /users/profile/edit/avatar { client_max_body_size 2m; ... } location /users/profile/edit/images { client_max_body_size 5m; ... } } |
Как исправить ошибку «413 Request Entity Too Large» на стороне Apache веб-сервера
В Apache эта опция называется LimitRequestBody: https://httpd.apache.org/docs/2.4/mod/core.html#LimitRequestBody
По-умолчанию лимит не установлен (равен 0). Размер задается в байтах
Данную опцию можно использовать в следующих контекстах: server config, virtual host, directory, .htaccess. Т.е. можно задать глобальное значение, значение для домена, значение для конкретного url, а так же модифицировать его через .htaccess
Пример конфигурации VirtualHost
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<VirtualHost *:80> # Small, safe default (1 MB) <Location /> LimitRequestBody 1048576 </Location> # 2 MB <Location /users/profile/edit/avatar> LimitRequestBody 2097152 </Location> # 5 MB <Location /users/profile/edit/images> LimitRequestBody 5242880 </Location> </VirtualHost> |
Пример изменения конфигурации в .htaccess
$ nano .htaccess ... LimitRequestBody 5242880 ... |
Заключение
В современном мире знать и уметь все не возможно. Для решения повседневных проблем самое главное умение — это уметь искать нужную информацию в интернете. Если Вы это читаете, то у Вас все хорошо 🙂
HTTP response status code 413 Payload Too Large is a client error that is returned by the server in cases where the client has initiated a request that contains a message body that is larger than the server is willing to accept for processing.
Usage
When the 413 Payload Too Large error message is received, it is because the client is sending a request that is too large. A common example is when a client tries to send a file to the server that is of an acceptable type and format but is too long. Pictures, for instance, may be of an unnecessarily high resolution and can be significantly smaller without impacting the intended use. Rather than take on the responsibility of modifying the image files, the server refuses the transfer and relies on the client to do the necessary processing.
In these situations, a client can check for file size allowance in advance of initiating the PUT by using the [[expect|Expect: 100-continue header]. The server will acknowledge and in response, the message body can be sent or not.
The server can optionally send a Retry-After header in the response. If this is the case, the client may attempt the request again after a specified period or specified time and date. For example, if the client has exceeded their upload quota for the week, or large uploads are not allowed during peak hours, the server will suggest that they try again at a more appropriate time.
If the situation occurs because the server is out of storage space then the server shall send the error message 507 Insufficient Storage instead.
The server can include the Connection: close
header to terminate the connection, preventing the client from sending the message body.
Note
Search engines like Google will not index a URL with 413 Payload Too Large response status, and consequently, URLs that have been indexed in the past but are now returning this HTTP status code will be removed from the search results.
Example
In the example, the client attempts to send a file and the server responds with 413 Payload Too Large because there is a lot of traffic at the moment. In response, the server denies the request, closes the connection, and suggests that the client try again after 30 minutes.
Request
PUT /docs HTTP/1.1
Host: www.example.ai
Content-Type: applications/pdf
Content-Length: 10000
Response
HTTP/1.1 413 Payload Too Large
Retry-After: 1800
Connection: close
Content-Type: text/html
Content-Length: 202
<html>
<head>
<title>File Too Large</title>
</head>
<body>
<p>There is too much server traffic to accept your transfer at this time. Please try again after 30 minutes.</p>
</body>
</html>
Code references
.NET
HttpStatusCode.RequestEntityTooLarge
Rust
http::StatusCode::PAYLOAD_TOO_LARGE
Rails
:request_entity_too_large
Go
http.StatusRequestEntityTooLarge
Symfony
Response::HTTP_REQUEST_ENTITY_TOO_LARGE
Python3.5+
http.HTTPStatus.REQUEST_ENTITY_TOO_LARGE
Java
java.net.HttpURLConnection.HTTP_ENTITY_TOO_LARGE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_REQUEST_TOO_LONG
Angular
@angular/common/http/HttpStatusCode.PayloadTooLarge
Takeaway
The 413 Payload Too Large status code is a client error that is returned when a message-body is too large for the server to process. The connection may be closed, and the client may receive a Retry-After header if the problem is temporary.
See also
- Connection
- Retry-After
- RFC 7231
Last updated: June 2, 2022