Ошибка Nginx 413

Когда я пытаюсь загрузить файл на свой сайт, я получаю ошибку 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 и какие модули, которые она была построена, делает это жестким, но попробуйте следующее:

  1. Скопируйте файл client_max_body_size 300M; line в местоположение / {} часть вашей конфигурации vhost. Я не уверен, правильно ли он отменяет значение по умолчанию (которое равно 1 МБ).

  2. Вы используете 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.