この質問は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
。