http://example.com
:私のサイトhttp://example.net
:プロキシされたバックエンドNginxサーバーブロックを静的コンテンツサーバーとリバースプロキシの両方としてセットアップしようとしています。 Nginxは、最初に静的ファイルをチェックしてから、ファイルが存在しない場合はプロキシされたアプリケーションにリダイレクトする必要があります。これは次のように構成されています。
location @backend {
proxy_pass http://example.net;
}
location / {
try_files $uri $uri/ @backend;
}
ただし、このような構成でhttp://example.com
にアクセスすると403 Forbidden
が返されます。nginxは静的フォルダーを提供しようとし、index.html
を見つけられず、example.net
をプロキシせずに失敗するようです。次に、/
のルートを明示的に追加する必要があります。
location = / {
proxy_pass http://example.net;
}
このようにして、http://example.com/
はhttp://example.net
に適切にプロキシされます。しかし、そのような構成は奇妙に感じます:/
をプロキシするより良い方法はありますか?
$uri/
句が問題の原因です。
静的ディレクトリを表すURIに末尾の/
を追加する必要がない場合は、次を使用できます。
location / {
try_files $uri @backend;
}
または、既存のソリューションは、重複したtry_files
ではなくproxy_pass
でも機能します。
location = / {
try_files $uri @backend;
}
詳細については、 このドキュメント を参照してください。