Esta questão é semelhante aAplicar client_max_body_size apenas para um único URLmas diferente devido à reescrita.
Eu gostaria de permitir um tamanho corporal maior em endpoint lg
, mas não nos outros. Minha configuração existente é assim:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
Quero fazer algo parecido com o abaixo, mas continuo recebendo erros ou simplesmente não funciona:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
...
location /xyz/lg {
client_max_body_size 2m;
}
}
Tentei usar regex para o URL aninhado, mas só consegui:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location,
Responder1
O rewrite...break
é desnecessário, pois proxy_pass
um trailing /
executa a mesma tarefa, portanto seu location
bloco original pode ser simplificado para:
location /xyz/ {
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
A client_max_body_size
instrução precisa ser colocada dentro de um location
bloco, e esse bloco também precisa de uma proxy_pass
instrução, pois essa diretiva não é herdada.
Por exemplo:
location /xyz/ {
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
location /xyz/lg {
client_max_body_size 2m;
proxy_pass http://{{proxy_host}}:{{proxy_port}}/lg;
}
Você provavelmente pode aninhar os location
blocos, mas não faz sentido, pois não há nada para herdar.
Observe que a lg
parte do URI é adicionada à nova location
instrução e à nova proxy_pass
instrução.
O exemplo definirá o client_max_body_size
para qualquer URI quecomeça com /xyz/lg
, por exemplo /xyz/lg
, /xyz/lgfoo
e /xyz/lg/bar
.