zenn.dev
5日前
nginxで502が稀に発生する原因はkeepalive接続
nginxで散発的に発生する502 Bad Gatewayの原因はkeepaliveで再利用される接続にある。バックエンド停止時にFINが届いても、処理中のworkerはイベントループが埋まっておりすぐには気づかず、プールから閉じかけの接続を取り出して書き込むためRSTやconnection resetが発生する。GETは既定のリトライで隠れるがPOSTは502として返る。GitHub Actionsでの検証では、再起動なしで502が0件、再起動ありで98件発生した。対策としてはバックエンド停止前にupstreamから切り離してreloadするのが最も有効で、non_idempotentによるPOST再送は二重実行のリスクがあり、keepalive_timeoutの短縮は競合のタイムスケールが合わず効果がなかった。
nginxで散発的に発生する502 Bad Gatewayの原因はkeepaliveで再利用される接続にある。バックエンド停止時にFINが届いても、処理中のworkerはイベントループが埋まっておりすぐには気づかず、プールから閉じかけの接続を取り出して書き込むためRSTやconnection resetが発生する。GETは既定のリトライで隠れるがPOSTは502として返る。GitHub Actionsでの検証では、再起動なしで502が0件、再起動ありで98件発生した。対策としてはバックエンド停止前にupstreamから切り離してreloadするのが最も有効で、non_idempotentによるPOST再送は二重実行のリスクがあり、keepalive_timeoutの短縮は競合のタイムスケールが合わず効果がなかった。