Этот вопрос похож наПрименить client_max_body_size только для одного URLно отличается из-за переписывания.
Я хотел бы разрешить больший размер тела на конечной точке lg
, но не на других. Моя существующая конфигурация выглядит так:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
Я хочу сделать что-то вроде этого, но либо постоянно получаю ошибки, либо это просто не работает:
location /xyz/ {
rewrite ^/xyz/(.*) /$1 break;
...
location /xyz/lg {
client_max_body_size 2m;
}
}
Я попробовал использовать регулярное выражение для вложенного URL, но получил только:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location,
решение1
не rewrite...break
нужен, так как proxy_pass
завершающий блок /
выполняет ту же задачу, поэтому ваш исходный location
блок можно упростить до:
location /xyz/ {
proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
Оператор client_max_body_size
необходимо поместить в location
блок, а этому блоку также нужен proxy_pass
оператор, поскольку эта директива не наследуется.
Например:
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;
}
Вероятно, вы можете вкладывать location
блоки, но в этом нет смысла, поскольку наследовать нечего.
Обратите внимание, что lg
часть URI добавляется как к новому location
оператору, так и к новому proxy_pass
оператору.
В примере будет задано client_max_body_size
для любого URI, которыйначинается с /xyz/lg
, например /xyz/lg
, /xyz/lgfoo
и /xyz/lg/bar
.