Discourse チーム、こんにちは。
ホストマシンで nginx サーバーを、そして Docker 上で標準的な Discourse コンテナを稼働させています。基本的には、ホスト側の nginx がいくつか特定の HTTP フォルダを配信し、それ以外は proxy_pass 経由で Discourse コンテナにフォワードする構成です。
私の理解では、この問題の核心は、ホスト側の nginx 設定ファイルに /xyz という location が定義されており、これはホスト側の nginx が処理し、一方で / という location は Discourse コンテナへの proxy_pass として定義されている点にあります。
私のユースケースでは、Discourse の投稿として my.domaiin.com/xyz/some.html のようなリンクを貼る必要があります。つまり、Discourse 内のリンクがホスト側の nginx が配信するページを指している状態です。
これは最後の Discourse アップデートまでは正常に動作していました。しかし現在、これらのリンクをクリックすると Discourse の「見つかりません」ページが表示されてしまいます。一方、リンクのターゲットをコピーして新しいタブで開く場合は期待通りに動作します。
私は低レベルのプロトコルについてはある程度理解していますが、プロトコルスタックの上位層になるほど知識が不足しています。
現在の仮説は以下の通りです:Discourse 側の nginx が接続を保持(keepalive?)しているため、ホスト側の nginx が新しいリクエストパスを解析して正しいサーバーを選択する機会を逃しているのではないかということです。つまり、接続されたリクエストは保持されたままコンテナへ渡され、その結果、/xyz へのリクエストは、そのフォルダを知らない Discourse 側で処理されてしまうのではないか、と。
この問題にはどのように対処すべきでしょうか?もし簡単な解決策がない場合でも、いくつかのヒントや、適切な HTTP プロトコルの知識に基づいた詳しい説明があれば、大変助かります。
よろしくお願いいたします。