Nginx: 一部のパスを Node.js サーバーにプロキシできません (2 つの Docker コンテナ間)

Nginx: 一部のパスを Node.js サーバーにプロキシできません (2 つの Docker コンテナ間)

私の現在の設定は次のとおりです。私はdocker(ルートレスインストール)を使用しており、クリプトパッド(Node.js を使用)、Nginx をリバース プロキシとして使用します (免責事項: これまで Nginx を使用したことはありません)。Cryptpad と Nginx は両方とも別のコンテナーで実行されています。静的ファイルを提供するために、Cryptpad のすべての静的ファイルが存在するボリュームを作成し、Nginx コンテナーにマウントしました (読み取り専用)。問題は、一部のコンテンツがこの方法では提供できないことです。大きな blob ファイルは、Cryptpad コンテナーからのみアクセスできる外部ディレクトリに保存されます (これには理由があります)。そのため、Nginx にこのファイルへのリクエストを Cryptpad の Node サーバーに proxy_pass するように指示しようとしましたが、このリダイレクトを定義する方法がわかりません。

私の設定:

  • Nginx コンテナの名前: nginx
  • Cryptpad コンテナの名前: cryptpad
  • ノードサーバーのポート: 3000
  • 両方のコンテナは同じ(カスタム)ブリッジネットワークに接続されている(そのため、コンテナ名でアクセスできる)

サーバーのNginx-Config(関連セクションに短縮。全コードは以下から引用)ここ

[...]
location ^~ /block/ {# modified block location to test proxy (is accessed more easily than blob)
    add_header Cache-Control max-age=0;

    #try_files $uri =404;# original code
    try_files http://cryptpad:3000/$request_uri =409;# arbitrary error code to differentiate from normal errors
}
[...]
location @node {# used to proxy all unhandled locations to node
    proxy_pass http://cryptpad:3000;
}

try_files /www/$uri /www/$uri/index.html /customize/$uri @node;

しかし、/block/ にアクセスするとサーバーは 409 を返すため、リダイレクトは機能しませんでした。また、proxy_pass http://cryptpad:3000/$request_uri/;またはproxy_pass http://cryptpad:3000;(結果は 404)と も試しましたtry_files @node =409;

それで、この内部リダイレクトを機能させる方法、または少なくとも 2 つのコンテナー間のトラフィックを監視する方法を知っている人はいますか?

答え1

さらに試してみたところ、うまくいく設定が見つかりました。例のproxy_passesの他の行をコピーしただけで、/block/の定義は次のようになります。

location ^~ /block/ {
    add_header Cache-Control max-age=0;

    proxy_pass http://cryptpad:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header Cross-Origin-Resource-Policy;
    #add_header Cross-Origin-Resource-Policy cross-origin;
    proxy_hide_header Cross-Origin-Embedder-Policy;
    #add_header Cross-Origin-Embedder-Policy require-corp;
}

関連情報