Когда я пытаюсь загрузить файл на свой сайт, я получаю ошибку Nginx «413 Request Entity Too Large», однако в моем файле nginx.conf я уже явно заявил, что максимальный размер составляет около 250 МБ на данный момент, и изменил также максимальный размер файла в php.ini (и да, я перезапустил процессы). Журнал ошибок дает мне следующее:
2010/12/06 04:15:06 [error] 20124 # 0: * 11975 клиент, предназначенный для отправки слишком большого тела: 1144149 байт, клиент: 60.228.229.238, сервер: www.x.com, request: «POST / upload HTTP / 1.1 ", хост:" x.com ", referrer:" http://x.com/ "
Насколько я знаю, 1144149 байт не 250 МБ … Есть ли что-то, чего я здесь не хватает?
Вот базовая конфигурация Nginx:
user nginx; worker_processes 8; worker_rlimit_nofile 100000; error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; client_max_body_size 300M; tcp_nopush on; tcp_nodelay on; server_tokens off; gzip on; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; keepalive_timeout 300; limit_zone myzone $binary_remote_addr 10m; # Load config files from the /etc/nginx/conf.d directory include /etc/nginx/sites/*; }
И призрак для сайта:
server { listen 80; server_name www.x.com x.com; access_log /var/log/nginx/x.com-access.log; location / { index index.html index.htm index.php; root /var/www/x.com; if (!-e $request_filename) { rewrite ^/([az,0-9]+)$ /$1.php last; rewrite ^/file/(.*)$ /file.php?file=$1; } location ~ /engine/.*\.php$ { return 404; } location ~ ^/([az,0-9]+)\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
Не зная версию вашей сборки nginx и какие модули, которые она была построена, делает это жестким, но попробуйте следующее:
Скопируйте файл client_max_body_size 300M; line в местоположение / {} часть вашей конфигурации vhost. Я не уверен, правильно ли он отменяет значение по умолчанию (которое равно 1 МБ).
Вы используете nginx_upload_module ? Если это так, убедитесь, что у вас есть upload_max_file_size 300MB; line в вашей конфигурации.
Моя настройка:
php.ini
... upload_max_filesize = 8M ...
nginx.conf
... client_max_body_size 8m; ...
Nginx показал ошибку 413, когда она была загружена.
Тогда у меня возникла идея: я не допущу, чтобы nginx отображал ошибку 413, client_max_body_size задано значение больше, чем upload_max_filesize, таким образом:
php.ini
... upload_max_filesize = 8M ...
nginx.conf
... client_max_body_size 80m; ...
Что случилось?
Когда вы загружаете меньше, чем 80 МБ, nginx не отображает ошибку 413, но PHP отображает ошибку, если файл имеет размер до 8 МБ.
Это решило мою проблему, но если кто-то загрузил файл размером более 80 МБ, ошибка 413, то правило nginx.
Я также добавляю, что вы можете определить его в обработчике местоположения * .php
location ~ ^/([az,0-9]+)\.php$ {
Будучи «нижним» на каскадном уровне, было бы простым способом узнать, возникает ли проблема из вашей конфигурации или модулей nginx.
Это, конечно, не из PHP, потому что ошибка 413 «слишком большая» – действительно ошибка NGinx.