Aplique client_max_body_size apenas para um único URL

1

Eu quero permitir que o cliente faça o upload de arquivos em nosso sistema, e eu quero que eles possam fazer upload de arquivos maiores que o corpo padrão definido no nginx.

Então defini o seguinte na configuração do site:

client_max_body_size 10m;

Até agora, tudo bem, mas eu realmente só preciso desse tamanho de corpo maior em um único URL; o usuário POST para.

Então, tentei a seguinte configuração:

location /api/files/ {
  client_max_body_size 10m;
}

Mas isso não funciona, recebo o seguinte erro no log:

2016/04/24 13:52:51 [error] 17853#0: *1569513 client intended to send too large body: 1083334 bytes, client: 203.0.113.7, server: example.com, request: "POST /api/files HTTP/1.1", host: "example.com"

Então, tentei a seguinte alteração:

location = /api/files {
  client_max_body_size 10m;
}

Mas isso resulta em um erro diferente:

2016/04/24 14:25:50 [error] 19500 # 0: * 171 open () "/ usr / share / nginx / html / api / files" falhou (2: Nenhum arquivo ou diretório), cliente: 203.0.113.7, server: example.com, request: "POST / api / arquivos HTTP / 1.1", host: "example.com"

Isso me faz supor que location realmente se refere a locais no sistema de arquivos local, mesmo que documentação diz:

Sets configuration depending on a request URI.

Então, como aplico essa alteração de configuração apenas para esse único local de solicitação?

    
por Der Hochstapler 24.04.2016 / 14:35

1 resposta

1

Acho que a solução está em um local aninhado. Então, "location / api / files" deve estar dentro do seu bloco de localização do php. Sua configuração fastcgi deve ser herdada no local "arquivos".

link

location ~* \.php$ {
     try_files $uri =404;
     fastcgi_pass backend; 
     # [...]

     location /api/files { 
          client_max_body_size 10m;
     }
}

Se você tem arquivos de localização / api / fora do seu local do php, o nginx iria encontrar 'api / files' e lembrá-lo. Mas antes de usá-lo, ele iria verificar se há um local com uma expressão regular correspondente, que seria o local do php para solicitações de arquivos php. Em seguida, ele usaria o local do php e descartaria 'location api / files'.

    
por 24.04.2016 / 15:06

Tags