A diretiva NGINX "client_max_body_size" não funciona dentro do bloco "location"

13

Eu tenho um /admincatálogo no meu site e gostaria de permitir que os administradores enviem arquivos grandes por meio de formulários da web. Aqui está a aparência do meu nginx.com:

http {
    # ...
    client_max_body_size 16M;
    # ...

    server {
        server_name example.com;
        root /var/www/example.com;
        index index.php;

        location /admin {
            client_max_body_size 256M;
        }

        # ...
    }
}

Isso não funciona. /admin/index.phpO script não pode carregar arquivos maiores que 16Mb: 413 Solicitar Entidade Muito Grande

No entanto, se eu mudar client_max_body_sizepara serverbloquear tudo funciona bem. Mas eu não gostaria de fazer essa alteração apenas no admincatálogo.

De acordo com os documentos , client_max_body_sizepode ser colocado dentro do locationbloco para substituir a configuração apenas para o caminho desejado.

O que pode estar errado?

Temnovit
fonte

Respostas:

13

Funciona muito bem, o problema é que você não entendeu como os locais funcionam. O Nginx aplicará apenas um bloco de localização, nunca mais que um. Então, quando você tem dois locais

location ~ \.php$e location /admino URI é /admin/index.phpsua primeira localização, mas a segunda não. Mesmo se você usasse uma reescrita em um local, o nginx descartaria diretivas e as revisaria novamente para o novo local.

Essa também é a razão pela qual você sempre publica configurações completas para não ocultar o que está realmente errado.

Martin Fjordvald
fonte
Desculpe, por não postar a configuração completa, você está certo. Quanto à resposta, isso não pode ser verdade. Aqui está o exemplo de docs: wiki.nginx.org/HttpCoreModule#location E em outros lugares, vários blocos de localização funcionam muito bem para mim.
Temnovit 30/08/11
1
Desculpe, mas é 100% certo. O Nginx pode pesquisar vários blocos de localização, mas apenas aplicará as diretrizes de um deles. Qual deles escolhe depende das regras documentadas na página que você vinculou.
Martin Fjordvald 30/08
@MartinFjordvald, qual é a solução para isso?
chaosguru
Olhe configuration Eno link: nginx.org/en/docs/http/ngx_http_core_module.html#location
holmberd