How can I combine rewrite and client_max_body_size in nginx? -


i want enable large file uploads single location, , location rewritten location. seems rewrite resetting other configurations.

my config:

server {     listen 80;      server_name example.com;     root /var/www;     index index.php;      # location requires large file upload     location /upload {         client_max_body_size 512m;         rewrite ^(.*)$ /index.php?request=$1 last;     }      # other locations     location / {         rewrite ^(.*)$ /index.php?request=$1 last;     }      # pass php scripts fpm     location ~ \.php$ {         include /etc/nginx/includes/php;     } } 

if move client_max_body_size out of location , server, works.

if put in both location /upload , location ~ \.php$, works. don't want other locations able upload large files.

i thinking direct php directly in location /upload, once run rewrite location anyway. mean have have 2 separate locations php scripts? there way make client_max_body_size retain through other locations after rewrite?

if need specific client_max_body_size needs set within (or inherited by) location processes final uri. in case, location ~ \.php$.

as indicate in question, simplest solution process php file in location /upload. easy achieve, have php configuration in separate include file.

either rewrite ... break; or overriding 2 of fastcgi_param directives should work you:

option 1:

location /upload {     client_max_body_size 512m;      rewrite ^(.*)$ /index.php?request=$1 break;      include /etc/nginx/includes/php; } 

see this document details.

option 2:

location /upload {     client_max_body_size 512m;      include /etc/nginx/includes/php;      fastcgi_param query_string    request=$uri&$query_string;     fastcgi_param script_filename $document_root/index.php; } 

Comments