每个位置块的Nginx client_max_body_size(使用php frontcontroller模式)


8

我正在寻找此问题的解决方案。我理解为什么该问题中的设置无法正常工作的原因,但是我尝试找到一种可以使其正常工作的解决方案。

这个想法是只允许在某些URL上上传大文件。我可以location为此使用一个块,但问题是:我有一个php frontcontroller模式:

location ~ \.php {
    # ...
    fastcgi_pass unix:/tmp/php5-fpm.sock;
}

我的总配置如下:

# ...

http {
    # ...

    client_max_body_size 512K;

    server {
        server_name example.com;
        root        /var/www/example.com/public;

        location / { 
            try_files $uri /index.php?$query_string;
        }

        location /admin/upload {
            client_max_body_size 256M;
        }

        location ~ \.php {
            # ...

            fastcgi_pass unix:/tmp/php5-fpm.sock;
        }
    }
}

据我了解,只会应用一个位置块。因此,如果我的默认请求大小为512K,则将不会应用256M,因为所有请求都是通过frontcontroller模式匹配的~ \.php

在这种情况下,我是对的admin/upload吗?如果可以,可以进行哪些配置,以使访问者只能上传到,而不能上传任何内容?

Answers:


2

定义两个php位置?

location ~ ^/admin/upload/.+\.php$
{
    client_max_body_size 256M;
    include /etc/nginx/conf.d/php-fpm.conf;
}   
location ~ \.php
{
    include /etc/nginx/conf.d/php-fpm.conf;
}

也许不是最漂亮的。


1

如果/admin/upload路径是虚拟的,则可以使其工作如下:

location / {
    try_files $uri /index.php?$args;
}

location /admin/upload {
    client_max_body_size 256M;

    include inc/php.conf;
    rewrite ^(.*)$ /index.php?$args break;
}

location ~ \.php$ {
    include inc/php.conf;
}

也不是最漂亮,但可以。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.