概要
ブラウザから初回アクセスしたときは特段問題ないのに、少し放置すると通信が不安定になる問題があったので自身の場合の解決方法を簡単にまとめる。
注意
本知見は自分自身によるものではありません。先輩技術者さんから提供いただいた内容になります。本記事は自身用のメモとしての意味合いが強いです。
先輩技術者さんへこの場を借りて改めてお礼申し上げます。本件本当にありがとうございます。
詳細
nginxのリバプロが存在するWebサービスのインフラ構築をした。
EC2インスタンスは起動・動作実績のあるインスタンスのAMIから起動した。
ドメインの解決やネットワーク系のリソース作成も行い、いざブラウザでアクセスする。このときは問題なく画面遷移やWebサービス提供機能が使える。(画面遷移が遅い気もするが。。。)
その状態でブラウザを数分〜数十分放置すると画面ロードがめっちゃ長くなるかERR_CONNECTION_RESET
のエラーで画面が遷移できなくなる。
数回リロードするとエラーは解消する。
自身の場合の解消方法
リバプロnginxの設定で下記の内容(ipv6を許容する設定)を追記してnginxを再起動させた。
listen [::]:80 default_server;
これにより数分〜数十分放置してもエラーが出たり、アクセスに時間がかかったりしなくなった。
原因は謎
まず、下記の確認ツールを使って自身がipv6を使っているのかを確認してみた。結果自身はipv4だった。
ということは「今までipv6でアクセスしてて、nginxの設定でipv6が許容されたから問題が解決した」わけではなさそう。(初回アクセス時にはそもそも通常動作してたし。。)
さらに当該のEC2に関連するロードバランサーやVPNの設定を確認したがipv6は許容されていなかった。
もしかするとlisten [::]:80 default_server;
の追記はそこまで原因の解決につながっておらず、nginxの再起動が効果的だった可能性もある。(キャッシュが悪さしていたり、、、)(本来 listen [::]:80 default_server;
の設定を削除し、nginxを再起動して様子見すればココも切り分けできる気がするが、再発して直せなくなっても困るので今回は検証しない。。!)
ちなみにv4とv6療法をサポートするモードは「デュアルスタック」と呼ばれるらしい。このモードにしたことにより通信が安定化された可能性も考えられなくはない