Aplique client_max_body_size para una única URL solo mientras usa reescrituras

Aplique client_max_body_size para una única URL solo mientras usa reescrituras

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...breakes innecesario, ya que proxy_passcon un seguimiento /realiza la misma tarea, por lo que su locationbloque original se puede simplificar a:

location /xyz/ {
    proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}

La client_max_body_sizedeclaración debe colocarse dentro de un locationbloque, y ese bloque también necesita una proxy_passdeclaració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 locationbloques, pero no tiene sentido ya que no hay nada que heredar.

Observe que la lgparte del URI se agrega tanto a la nueva locationdeclaración como a la nueva proxy_passdeclaración.

El ejemplo establecerá el client_max_body_sizepara cualquier URI queempieza con /xyz/lg, por ejemplo /xyz/lg, /xyz/lgfooy /xyz/lg/bar.

información relacionada