はじめに
api開発に携わっているフリーランスエンジニアです。
今回はapi開発にあたって、単体テストを通過して結合テストの際にフロント画面で正常動作しているかを確認している際に起こった出来事です。
ネットで調べてもドンピシャな解決法が出てこなかったので、自分に対する備忘録も兼ねてシェアできればと思います。
トピック
- 事象
- 原因
- 解決方法
- 教訓
環境
php 7.1
Laravel 5.5
nginx /1.13.8
事象
api開発をし終わり、postmanを使って直接apiサーバーのエンドポイントを叩き、外部apiから情報を取得して、200でレスポンスを返すところまで確認。
テストも作成し、カバレッジも100%。
フロントサーバーからapiサーバーにリクエストを送り挙動を確認する結合テストにおいて、レスポンスは200なのに、フロント画面ではエラーになってしまった。調査してログを見るとフロントサーバーからのリクエストで返ってくるhttp_codeが502だった。
原因
apiサーバーのログを確認するが、正常の動作をしておりbodyの中を確認しても変なデータは入っておらず200で返していた。。。。
なぜ・・・・
あ、見逃していたログがあった。
サーバー内のアクセスログ。
確認してみると下記のようなエラーログが・・・
upstream sent too big header while reading response header from upstream,
どうやらレスポンスヘッダーサイズが大きすぎて怒られているみたい。
解決方法
FastCGIレスポンスのためのバッファサイズを大きくすると解決します。
らしい。
proxy_buffers
proxy_buffer_size
proxy_busy_buffers_size
こいつらのバッファサイズを大きくすると・・・・いけた!!!!!!
教訓
明らかにphpのログで異常な動きをしていない場合は、サーバー自体の設定で怒られている可能性が高い。そこに仮説を立てて調べたらより早くデバックできます。