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

10

Eu tenho um catálogo /admin no meu site e gostaria de permitir que os administradores façam upload de arquivos grandes por meio de formulários da web. Aqui está como meu nginx.com se parece:

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. O script /admin/index.php não pode carregar arquivos maiores que 16Mb: Entidade de solicitação 413 muito grande

No entanto, se eu mover client_max_body_size para server bloquear tudo funciona bem. Mas eu não gostaria de fazer essa alteração apenas para o catálogo admin .

De acordo com docs , client_max_body_size pode ser colocado dentro de location block para substituir a configuração apenas para o caminho desejado.

O que poderia estar errado?

    
por Temnovit 24.08.2011 / 12:30

1 resposta

11

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

location ~ \.php$ e location /admin e o URI é /admin/index.php , em seguida, sua primeira localização é aplicada, mas a segunda não. Mesmo se você fosse usar uma reescrita em um local, o nginx descartaria as diretivas e as repararia para o novo local.

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

    
por 24.08.2011 / 13:35

Tags