nginx: proxy_pass ディレクティブでホストに URI パスを追加するにはどうすればいいですか?

nginx: proxy_pass ディレクティブでホストに URI パスを追加するにはどうすればいいですか?

問題:

  • URI 内の特定のパスを持つリクエストを にproxy_passリダイレクトするには、 nginx ディレクティブを使用します(例: ) 。httpslocationhttps://domain/path/index.htmlhttp://container_ip:port/index.html
  • これは最初のリクエストでは正常に機能します。
  • ただし、HTML ファイルで読み込むリソースが指定されている場合、クライアントはパスなしでベース URL のみを使用してこれらのリソースを検索します (例 ) https://domain/main.css

質問:
https://domain/path/main.cssこのようなリソースも元のパスで検索されるように nginx を構成するにはどうすればよいでしょうか。 例では、

現在の不正な nginx 構成:

server {
    listen 443 ssl;
    server_name domain;

    [...]

    location /path/ {
        proxy_set_header Host $host;
        proxy_pass http://container_ip:port/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

答え1

リソースへのパスはアプリケーションによって生成されます。適切で信頼性の高いアプローチは、正しいパスを持つリソース URL を生成するようにアプリケーションを修正することです。

信頼性の低い解決策が必要な場合は、nginx.org/ja/docs/http/ngx_http_sub_module.html を参照してください。nginx がプロキシする応答内のリソース URL を置き換えます。ただし、診断が難しい望ましくない副作用が発生する可能性があります。

関連情報