Esta pregunta es similar aAplicar client_max_body_size solo para una única URLpero diferente debido a la reescritura.
Me gustaría permitir un tamaño de cuerpo más grande en el punto final lg
, pero no en los demás. Mi configuración existente se ve así:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
Quiero hacer algo como lo siguiente, pero sigo recibiendo errores o simplemente no funciona:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
...
location /xyz/lg {
client_max_body_size 2m;
}
}
Intenté usar expresiones regulares para la URL anidada pero solo obtuve:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location,
Respuesta1
Esto rewrite...break
es innecesario, ya que proxy_pass
con un seguimiento /
realiza la misma tarea, por lo que su location
bloque original se puede simplificar a:
location /xyz/ {
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
La client_max_body_size
declaración debe colocarse dentro de un location
bloque, y ese bloque también necesita una proxy_pass
declaración, ya que esa directiva no se hereda.
Por ejemplo:
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;
}
Probablemente puedas anidar los location
bloques, pero no tiene sentido ya que no hay nada que heredar.
Observe que la lg
parte del URI se agrega tanto a la nueva location
declaración como a la nueva proxy_pass
declaración.
El ejemplo establecerá el client_max_body_size
para cualquier URI queempieza con /xyz/lg
, por ejemplo /xyz/lg
, /xyz/lgfoo
y /xyz/lg/bar
.