Применяйте client_max_body_size только для одного URL-адреса при использовании перезаписей

Применяйте client_max_body_size только для одного URL-адреса при использовании перезаписей

Этот вопрос похож наПрименить 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.

Связанный контент