僅在使用重寫時對單一 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;
  }
}

我嘗試使用正則表達式作為嵌套網址,但只得到:

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 的一部分已新增到 newlocation語句和 newproxy_pass語句中。

client_max_body_size該範例將為任何 URI設置開始於 /xyz/lg,例如/xyz/lg/xyz/lgfoo/xyz/lg/bar

相關內容