Wenden Sie client_max_body_size beim Umschreiben nur für eine einzelne URL an.

Wenden Sie client_max_body_size beim Umschreiben nur für eine einzelne URL an.

Diese Frage ähneltWenden Sie client_max_body_size nur für eine einzelne URL anaber aufgrund der Umschreibung anders.

Ich möchte eine größere Textgröße für den Endpunkt zulassen lg, aber nicht für die anderen. Meine vorhandene Konfiguration sieht folgendermaßen aus:

location /xyz/ {
  rewrite ^/xyz/(.*) /$1 break;
  proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}

Ich möchte etwa das Folgende tun, erhalte jedoch ständig Fehlermeldungen oder es funktioniert einfach nicht:

location /xyz/ {
  rewrite ^/xyz/(.*) /$1 break;
  ...
  location /xyz/lg {
    client_max_body_size 2m;
  }
}

Ich habe versucht, reguläre Ausdrücke für die verschachtelte URL zu verwenden, habe aber nur Folgendes erhalten:

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location,

Antwort1

Dies rewrite...breakist unnötig, da proxy_passmit einem Trailing /die gleiche Aufgabe ausgeführt wird. Ihr ursprünglicher locationBlock kann daher wie folgt vereinfacht werden:

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

Die client_max_body_sizeAnweisung muss innerhalb eines Blocks platziert werden location, und dieser Block benötigt auch eine proxy_passAnweisung, da diese Direktive nicht vererbt wird.

Zum Beispiel:

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;
}

Sie können die locationBlöcke wahrscheinlich verschachteln, aber das hat keinen Sinn, da es nichts zu erben gibt.

Beachten Sie, dass der URI-Teil sowohl zur neuen Anweisung als auch zur neuen Anweisung lghinzugefügt wird .locationproxy_pass

Das Beispiel setzt client_max_body_sizefür jede URI diebeginnt mit /xyz/lg, zB /xyz/lg, /xyz/lgfoound /xyz/lg/bar.

verwandte Informationen