Nginx Error 413

nginxPHPupload

I originally posted this on Stack Overflow, then remembered that SO isn't for server-based questions.

Hey guys,

When I try to upload a file to my site, I'm getting the Nginx "413 Request Entity Too Large" error, however in my nginx.conf file I've already explicitly stated the max size to be about 250MB at the moment, and changed the max file size in php.ini as well (and yes, I restarted the processes). The error log gives me this:

2010/12/06 04:15:06 [error] 20124#0:
*11975 client intended to send too large body: 1144149 bytes, client:
60.228.229.238, server: www.x.com, request: "POST
/upload HTTP/1.1", host:
"x.com", referrer:
"http://x.com/"

As far as I know, 1144149 bytes isn't 250MB…
Is there something I'm missing here?

Here's the base Nginx config:

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/*;
}

And the vhost for the 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;
  }
 }
}

Am I missing something here?

Best Answer

Try moving client_max_body_size to inside the server block.