使用重写时仅对单个 URL 应用 client_max_body_size

使用重写时仅对单个 URL 应用 client_max_body_size

这个问题类似于仅对单个 URL 应用 client_max_body_size但由于重写而有所不同。

我想允许在端点上使用更大的主体尺寸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块,但是没有意义,因为没有什么可继承。

请注意,lgURI 的部分被添加到了新location语句和新proxy_pass语句中。

client_max_body_size该示例将为任何 URI设置开始于 /xyz/lg,例如/xyz/lg/xyz/lgfoo/xyz/lg/bar

相关内容