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...break
ist unnötig, da proxy_pass
mit einem Trailing /
die gleiche Aufgabe ausgeführt wird. Ihr ursprünglicher location
Block kann daher wie folgt vereinfacht werden:
location /xyz/ {
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
Die client_max_body_size
Anweisung muss innerhalb eines Blocks platziert werden location
, und dieser Block benötigt auch eine proxy_pass
Anweisung, 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 location
Blö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 lg
hinzugefügt wird .location
proxy_pass
Das Beispiel setzt client_max_body_size
für jede URI diebeginnt mit /xyz/lg
, zB /xyz/lg
, /xyz/lgfoo
und /xyz/lg/bar
.