這個問題類似於僅對單一 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;
}
}
我嘗試使用正則表達式作為嵌套網址,但只得到:
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 的一部分已新增到 newlocation
語句和 newproxy_pass
語句中。
client_max_body_size
該範例將為任何 URI設置開始於 /xyz/lg
,例如/xyz/lg
,/xyz/lgfoo
和/xyz/lg/bar
。