Quero permitir que o cliente faça upload de arquivos em nosso sistema e 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 nosso site:
client_max_body_size 10m;
Até agora, tudo bem, mas eu realmente só preciso desse tamanho de corpo maior em uma única URL; os usuários POST
.
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 [erro] 17853#0: *1569513 cliente destinado a enviar corpo muito grande: 1083334 bytes, cliente: 203.0.113.7, servidor: exemplo.com, solicitação: "POST /api/arquivos HTTP/1.1", host: "example.com"
Então tentei a seguinte alteração:
location = /api/files {
client_max_body_size 10m;
}
Mas isso apenas resulta em um erro diferente:
2016/04/24 14:25:50 [erro] 19500#0: *171 open() "/usr/share/nginx/html/api/files" falhou (2: Nenhum arquivo ou diretório), cliente: 203.0 .113.7, servidor: exemplo.com, solicitação: "POST /api/arquivos HTTP/1.1", host: "exemplo.com"
Isso me faz supor que location
realmente se refere a locais no sistema de arquivos local, mesmo que a documentação diga:
Define a configuração dependendo de um URI de solicitação.
Então, como aplico essa alteração de configuração apenas para esse único local de solicitação?
Acho que a solução está em um local aninhado. Portanto, "location /api/files" deve estar dentro do bloco de localização do php. Sua configuração fastcgi deve ser herdada para o local "arquivos".
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
Se você tiver o local /api/files fora do local do php, o nginx encontrará 'api/files' e o lembrará. Mas antes de usá-lo, ele verificaria se existe um local com uma expressão regular correspondente, que seria o local php para solicitações de arquivo php. Em seguida, ele usaria o local do php e descartaria 'location api/files'.