2010-12-06 42 views
12

Lorsque j'essaie de télécharger un fichier sur mon site, j'obtiens l'erreur «413 Request Entity Too Large» de Nginx, mais dans mon fichier nginx.conf, j'ai déjà explicitement indiqué la taille maximale à être environ 250 Mo en ce moment, et changé la taille maximale du fichier dans php.ini ainsi (et oui, j'ai redémarré les processus). Le journal d'erreur me donne ceci:Erreur Nginx 413

2010/12/06 04:15:06 [error] 20124 # 0: * 11975 client avait l'intention d'envoyer corps trop grand: 1144149 octets, client: 60.228.229.238 , serveur: www.x.com, demande: "POST /upload HTTP/1.1", hôte: "x.com", referrer: "http://x.com/"

Comme autant que je sache, 1144149 octets n'est pas 250MB ... Y a-t-il quelque chose qui me manque ici?

est ici la base config 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/*; 
} 

Et le vhost pour le site:

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 ^/([a-z,0-9]+)$ /$1.php last; 
      rewrite ^/file/(.*)$ /file.php?file=$1; 
     } 

     location ~ /engine/.*\.php$ { 
      return 404; 
     } 

     location ~ ^/([a-z,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; 
     } 
    } 
} 
+0

Vous devriez probablement citer les paramètres de configuration de nginx que vous avez modifiés –

+0

D'accord, ajouté. – EJay

Répondre

11

Ne connaissant pas la version de votre build nginx et quels modules il a été construit avec fait de ce difficile, mais essayez ce qui suit:

  1. Copiez votre client_max_body_size 300M; ligne dans l'emplacement/{} partie de votre config vhost. Je ne suis pas sûr que cela remplace la valeur par défaut (qui est de 1 Mo) correctement.

  2. Utilisez-vous nginx_upload_module? Si c'est le cas, assurez-vous d'avoir le fichier upload_max_file_size 300MB; ligne dans votre config ainsi.

-1

ajouter aussi que vous pouvez définir dans le * emplacement .php gestionnaire

location ~ ^/([a-z,0-9]+)\.php$ { 

être « inférieur » un dans le niveau en cascade, ce serait un moyen facile de voir si le Le problème vient de votre configuration nginx ou des modules.

Ca ne vient pas de PHP car l'erreur 413 "body too large" est vraiment une erreur NGinx.

+0

Je ne sais pas pourquoi j'ai été downvoted sur cette réponse? Soin d'expliquer? – nembleton

1

Ma configuration est:

php.ini

... 
upload_max_filesize = 8M 
... 

nginx.conf

... 
client_max_body_size 8m; 
... 

Le nginx a montré l'erreur 413 quand il a été téléchargé.

Alors j'ai eu une idée: je ne laisserai pas l'erreur nginx montrent 413, client_max_body_size fixée à une valeur supérieure à upload_max_filesize, ainsi:

php.ini

... 
upload_max_filesize = 8M 
... 

nginx.conf

... 
client_max_body_size 80m; 
... 

Que s'est-il passé? Si vous téléchargez moins de 80 Mo, nginx n'affichera pas l'erreur 413, mais PHP affichera l'erreur si le fichier atteint 8 Mo.

Cela a résolu mon problème, mais si quelqu'un télécharge un fichier de plus de 80 Mo d'erreur 413 arrive, règle nginx.

+0

J'ai ajouté client_max_body_size 64m; dans la partie http {} de la conf, redémarré et cela a fonctionné! Merci! – flunder

+0

cela a résolu pour moi. Je pensais que l'analyseur de corps sur mon serveur de noeud était le problème mais complètement oublié de placer cette ligne dans nginx – SMT