这个问题类似于仅对单个 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
块,但是没有意义,因为没有什么可继承。
请注意,lg
URI 的部分被添加到了新location
语句和新proxy_pass
语句中。
client_max_body_size
该示例将为任何 URI设置开始于 /xyz/lg
,例如/xyz/lg
,/xyz/lgfoo
和/xyz/lg/bar
。