タイムアウトを増やす前に、リクエストがどこで失敗したか特定します。502はupstreamとの通信失敗、504はupstream待機の期限切れを示すことが多くあります。実際の原因はログで区別します。
例:アプリケーションが待ち受けていない
エラーログの抜粋が次のようになっているとします。
text
connect() failed (111: Connection refused) while connecting to upstream
upstream: "http://127.0.0.1:3000/products"
Nginxはポート3000への接続を試み、拒否されました。アプリケーションが起動し、そのアドレスで待ち受けているか確認します。Nginx自身のマシンまたはコンテナーからcurl -i http://127.0.0.1:3000/productsを試します。コンテナー内では、このアドレスはそのコンテナー自身を指し、別アプリケーションのコンテナーを自動的に指すわけではありません。
例:接続できたが応答ヘッダーが間に合わない
text
upstream timed out while reading response header from upstream
これはレスポンスヘッダーの待機を示します。リクエストをアプリケーションログや遅いデータベースクエリと突き合わせます。接続時間とupstream応答時間を調べ、ネットワーク接続の確立とアプリケーションの処理を分けます。
