我想将大文件上传到一个位置,然后将该位置重写到另一个位置。似乎重写正在重置其他配置。
我的配置:
server {
listen 80;
server_name example.com;
root /var/www;
index index.php;
# this location requires large file upload
location /upload {
client_max_body_size 512M;
rewrite ^(.*)$ /index.php?request=$1 last;
}
# all other locations
location / {
rewrite ^(.*)$ /index.php?request=$1 last;
}
# pass the PHP scripts to FPM
location ~ \.php$ {
include /etc/nginx/includes/php;
}
}
如果我将client_max_body_size从location
移出server
,那么它就可以了。
如果我将它放在location /upload
和location ~ \.php$
中,那么它也可以。但我不希望其他地方能够上传大文件。
我原以为我可以直接在location /upload
中直接使用PHP,但是一旦我运行重写,它就会寻找另一个位置。这是否意味着我必须有两个单独的PHP脚本位置?有没有办法让client_max_body_size
在重写后通过其他位置保留?
答案 0 :(得分:0)
如果您需要特定的client_max_body_size
,则需要在处理最终URI的location
内设置(或继承)。在您的情况下,即location ~ \.php$
。
正如您在问题中指出的那样,最简单的解决方案是在location /upload
中处理PHP文件。这很容易实现,因为您已经将PHP配置放在单独的包含文件中。
rewrite ... break;
或覆盖两个fastcgi_param
指令应该适合您:
选项1:
location /upload {
client_max_body_size 512M;
rewrite ^(.*)$ /index.php?request=$1 break;
include /etc/nginx/includes/php;
}
有关详细信息,请参阅this document。
选项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;
}