banner
Kerronex

Kerronex

兴趣使然,一个随手记笔记本

Cloudflareのプロキシを経由してアクセスすると、タイムアウトが発生します。

由于一些原因,私は Cloudflare を使用してサーバー上のサービスをプロキシすることにしました。主な目的は、サーバーの IP を簡単に隠すことですが、加速効果も期待しています〜しかし、いくつかの理解しがたい問題に直面しました。

私は 2 つのサービスを Docker で実行しました。1 つは https で 8443 ポートにマッピングすることを意図しています。もう 1 つは通常の http で 8002 ポートで実行され、SSL をサポートしていません。

DNS を設定した後、8443 ポートに https でドメインを使用してアクセスしようとするとタイムアウトが発生します。また、8002 にアクセスしようとするとタイムアウトします。最初はサービスに問題があると思い、問題を調査しましたが、問題は見つかりませんでした。IP アドレスでテストアクセスしたところ正常であることがわかりました。

ChatGPT に時間を取られてしまいました。ChatGPT、Bing、Bard のどれが答えても、言っていることは適当でした。AI はやはり頼りにならないようです... 時間の浪費です。

私の理解によれば、IP アクセスに問題がないので、サーバーの設定には大きな問題はないはずです。おそらく Cloudflare の設定に問題があるはずです。8443 への HTTPS アクセスがタイムアウトする場合、SSL/TLS の設定に問題があるはずです。ドキュメントによれば、4 つのプロキシモードが理解しやすいです。最も一般的なのは、Flexible と Full です。

  • Flexible フレキシブルモードを使用する場合、http または https でアクセスしても、CF は http でソースにアクセスします。この場合、ソースサーバーには SSL 証明書は必要ありません。
  • Full 完全モードを使用する場合、訪問者のリクエストに応じてソースに接続します。つまり、訪問者が「http」を使用している場合、Cloudflare はプレーンテキストの HTTP でソースに接続し、その逆も同様です。このモードでは、ソースサーバーの SSL 証明書は検証されませんので、自己署名証明書や CF によって発行された証明書を使用できます。

私の現在の設定は Flexible モードです。説明によれば、http でソースにアクセスするため、確かに接続できません。Full モードに変更した後、8443 に対するテストアクセスが正常に機能することを確認しました。


しかし、8002 ポートがタイムアウトする理由は説明できません。8002 は HTTP をサポートしていますが、アクセスできません。もちろん、Full モードに変更すると、8002 は HTTPS を使用できなくなります。別のドメインに変更し、Flexible モードを使用しても、8002 にアクセスできません。

最後に、公式ドキュメントの Flexible モードの説明部分で原因を見つけました:

Flexible モードは、ポート 443(デフォルトポート)での HTTPS 接続のみをサポートしています。他のポートを使用した HTTPS は Full モードにフォールバックします。
https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/flexible/#limitations

つまり、Flexible モードには制限があり、HTTPS 接続はポート 443 のみをサポートしています。他のポートを使用する場合は Full モードにフォールバックします。したがって、CF の HTTPS を使用したい場合は、カスタムポートを使用せずに、サービスのポートを 8002 から 80 に変更する必要があります。これにより、正常に動作します。

しかし、私は 80 ポートを使用してサービスを提供したくありませんし、HTTPS も使用したいです。最終的に、SSL をサポートするためにサーバーに Nginx を追加しました。しかし、アクセスはまだタイムアウトします。

現在の状況は少し厄介です:
Cloudflare は現在 Full モードであり、HTTPS でアクセスする場合、8443 は正常に動作しますが、8002 はタイムアウトします。これらの 2 つのサービスはどちらも SSL をサポートしており、IP アクセスでは正常に動作します。

両方がタイムアウトする場合、Cloudflare の設定に問題があると言えますが、IP アクセスができることから、Cloudflare のプロキシ後に 1 つは正常に動作し、もう 1 つはタイムアウトするというのは非常に奇妙です。

直感的には、Cloudflare に制限や設定があるはずです。間違った回答があったため、LLM モデルについて質問し続けましたが、問題は見つかりませんでした。

後であきらめかけていましたが、Cloudflare のドキュメントを調べて、Google で検索しているうちに、次のような記事を見つけました:

Cloudflare がサポートする HTTP ポート

  • 80
  • 8080
  • 8880
  • 2052
  • 2082
  • 2086
  • 2095

Cloudflare がサポートする HTTPS ポート

  • 443
  • 2053
  • 2083
  • 2087
  • 2096
  • 8443

https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/

これを見て、私もかなり困惑しました。8443 がホワイトリストに含まれているという偶然の一致です...

このような状況では、8002 は使用できないようですか?検索中に、ルールにOrigin Rulesというものがあることに気付きました。このルールを使用してホスト名に基づいてポートをリライトできます。したがって、Origin Rules に一致するように DNS にサブドメインを追加し、ポートをソースの 8002 にリライトすることができます。これにより、443 を直接使用してアクセスできます。うまくいっています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。