Помилка web 413 Request Entity Too Large

Лютий 23rd, 2012 | Теґи: , , , , , ,

Подібна помилка виникає при завантаженні великих файлів на сервер з допомогою http-протоколу.
Тут розглянемо їх в чотирьох випадках, при виникненні в: nginx, apache, PHP, IIS.
Як правило, браузер не може вказати правильно, де виникла помилка, тому шукаємо все в логах, або ж міняємо на всіх стадіях обробітку скрипта.

Отже, почнемо:
1. NGINX
Там параметром, що відповідає за ліміт по розміру файла для завантаження, є client_max_body_size.
Його можна змінювати як глобально (секція http), так і для сайту (server), або навіть для location(набір правил).
Виставляємо

 client_max_body_size 100m;

і релоад/рестрарт nginx.

Деталі можна знайти на оф. сайті та у wiki

2. APACHE/HTTP
Там цим параметром є LimitRequestBody. По замовчуванню він не лімітується, проте…
Параметр іде в байтах.
Підтримується директива на всіх ступенях конфігурації apache: від серверного конфіга, до директорії та .htaccess.
Додаємо в .htaccess стрічку (100мб)

LimitRequestBody 104857600

і перезавантажуємо сторінку для аплоада файлів. Можна заливати.

Деталі тут

3. РНР
Тут за ліміт відповідають два значення: прямо upload_max_filesize та опосередковано max_post_size.
Перший відповідає за обмеження на розмір завантажуваних файлів, другий ліміт – за POST запит, яким вони завантажуються. Другий ліміт не повинен бути менший за перший, інакше зміни ви просто не побачите.
По замовчуванню перший 2Мб, другий – 8Мб.
Якщо на сервері PHP як модуль apache, тоді достатньо прописати в .htaccess

php_value upload_max_filesize 100M
php_value post_max_size 100M

оновити сторінку, і лити файли.
Якщо ж РНР як CGI чи FASTCGI, то ці директиви треба задавати напряму в конфігурації апача (якщо стрічка запуску не підміняє основний php.ini користувацьким), а потім ребутити/рабоадити apache (якщо CGI), або PHP-обробник (якщо FASTCGI)

Деталі тут та тут

4. IIS
Там за ліміт відповідає директива UploadReadAheadSize (в байтах). Для того, щоб її змінити, треба перейти в каталог, де міститься appcmd.exe ( на системному розділі \windows\system32\inetsrv), та виконати команду

appcmd.exe set config -section:system.webServer/serverRuntime /uploadReadAheadSize:"104857600"  /commit:apphost

Ця для IIS7.
Для IIS6 виконується запитом

cscript adsutil.vbs set w3svc/1/uploadreadaheadsize 104857600

Деталі тут та тут.
На MSDN лінк не даю, так як там помилка 🙂

Ще немає коментарів.