web-dev-qa-db-ja.com

Nginx:/静的コンテンツとプロキシアプリケーションの両方

  • 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に適切にプロキシされます。しかし、そのような構成は奇妙に感じます:/をプロキシするより良い方法はありますか?

1
Charles

$uri/句が問題の原因です。

静的ディレクトリを表すURIに末尾の/を追加する必要がない場合は、次を使用できます。

location / {
    try_files $uri @backend;
}

または、既存のソリューションは、重複したtry_filesではなくproxy_passでも機能します。

location = / {
    try_files $uri @backend;
}

詳細については、 このドキュメント を参照してください。

2
Richard Smith