WebブラウザのSSLハンドシェイク中にnginx504クライアントがタイムアウトしました(110:接続がタイムアウトしました)



Nginx 504 Client Timed Out 110



背景は次のとおりです。

2台のサーバーはファイルを取得するために外部ネットワークのhttpsURLにアクセスする必要がありますが、2台のサーバーは外部サーバーと通信できず、フロントポップマシンを介してのみ外部ネットワークにアクセスできます。



2つのサーバーからのhttpリクエストを転送し、httpsリクエストとして転送し、外部ネットワークをリクエストするように、フロントポップマシンでnginxを設定する必要があります

nginxがデプロイされたら、外部ネットワークリクエストを行います。 nginxリクエストログから、最初の2つのリクエストのみが成功し200、後続のリクエストは成功していることがわかります。モバイルデバイス上のWebブラウザのSSLハンドシェイク中に504クライアントがタイムアウトしました(110:接続がタイムアウトしました)



最初は、大量のデータファイルのリクエストが原因で、読み取りと接続のタイムアウトが発生したと思いました。 nginx構成を調整し、タイムアウト期間を増やし、nginxサーバーがキャッシュに書き込むことを禁止します。

nginxログでそのようなログが多数見つかりました502SSLハンドシェイク

アップストリームへのSSLハンドシェイク中に、SSL_do_handshake()が失敗しました(SSL:エラー:1408F10B:SSLルーチン:SSL3_GET_RECORD:バージョン番号が間違っています)。



フィードバックによると、短期間に継続的なリクエストに対して502エラーが返されます。クエリデータは、nginxがデフォルトでSSLのアップストリームでSSLセッションを再利用しようとすることを発見しました。

解決策は、構成ファイルを増やすことです。

proxy_ssl_session_reuse off

location / { ... ... proxy_ssl_session_reuse off ... ... }

この問題は完全に解決されました。そのようなSSLハンドシェイクログはフォローアップログに表示されませんでした。