書き換えを使用している間、単一の URL にのみ client_max_body_size を適用する

書き換えを使用している間、単一の URL にのみ client_max_body_size を適用する

この質問は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内に配置する必要がありlocationproxy_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

関連情報