私は Google Compute Engine を使用しています。デプロイメント マネージャーをセットアップし、ネットワーク LB が Web サーバーに接続できるようにするファイアウォールをセットアップしました。Web サーバー自体はインスタンス グループ マネージャーに追加され、インスタンス グループ マネージャーをターゲットとするオートスケーラーがセットアップされ、Web サーバー インスタンスに対して実行される HTTP ヘルス チェックがセットアップされ、バックエンド サービスに HTTP ヘルス チェックが追加され、インスタンス グループ マネージャーがバックエンド サービスに追加され、バックエンド サービスをデフォルト サービスとする URL マップがセットアップされ、URL マッパーは、グローバル IP を持つ転送ルールによってポイントされる HTTP プロキシに追加されます。
この設定はここで説明した設定と非常に似ていますhttps://cloud.google.com/solutions/scalable-and-resilient-apps
さて、このセットアップで解決できそうな問題に移りましょう。Web サーバーで Nginx サーバーを実行しており、リクエストに応答し、イベント ソース接続を作成できますが、ちょうど 1 分後に接続が閉じられ、INCOMPLETE_CHUNKED_ENCODING エラーが発生します。Web サーバーの 1 つに直接接続した場合は、このようなことは起こりません。tcp keepalive の sysconf 設定を次のように変更しました。
net.ipv4.tcp_keepalive_time=600
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
これを読んだ後https://cloud.google.com/compute/docs/troubleshooting#ネットワークトラフィック
nginx 設定で数え切れないほどのことを試しましたが、解決策が見つからないようです。
何かアイデアや同様の問題をお持ちの方はいらっしゃいますか?
答え1
アレックスがその投稿リンクを共有したのは正しかった。なぜなら、それが主な問題につながるからだ。しかし、少し説明が必要だ。
HTTP 接続タイムアウトを増やすには、Nginx 構成ファイル (/etc/nginx/nginx.conf) の 'keepalive_timeout' 値 (デフォルトは 65) を変更して、ロード バランサの 600 秒のタイムアウトよりも長いタイムアウトにする必要があります。これにより、アイドル接続を閉じる側は nginx ではなくロード バランサになります。
Google Cloud Platform HTTP(S) ロードバランサで動作するように nginx キープアライブを調整します。nginx
で「keepalive_timeout 650;」を設定します。nginx.conf は、
keepalive_timeout 650;
keepalive_requests 10000;
より詳しい情報についてはhttp 永続性。
答え2
おそらくnginx
必要となるのはチューニング。