nodeサーバを構築してiOS/OSXでバックエンドAPIのレスポンスが取れなくてはまったメモです
前提として
環境は
ロードバランサ AWSのアプリケーションロードバランサ 1台
フロント(nodeサーバ)AWS EC2 1台
バックエンド(apache2.4) 1台
DB AWS RDS 1台
こちらの構成です
発生した事象は、iPhone/Macでページ表示の際に
APIからのデータが反映したりしなかったりすることがあるというもの
例えばTOPページの新着ニュースの表示がされたり、データが取得できずに新着ニュースが表示されなかったりといった感じの事象でした
調べてもあまりわからなかったんですがchromeの開発者ツールでエラーが出ているのを確認してググりました
あまり同様の事象の人は出てこなかったんですが
一人だけドンピシャの事象を記事にしている人を発見!!
これは本当に感謝です!!
参考にさせていただいた記事はこちら
AmazonLinux2のhttpdをALB経由で公開するWeb環境で発生していた、SafariのHTTPS接続エラーを改善してみた
本当に助かりました!!
ポイントは運用が始まってしまったのでどれとどれで発生条件になるか詳細まで詰め切れてはいませんが確認ポイントは以下だと思います
- ALB(application load balancer)を利用している
- apacheやnginxでリバースプロキシを利用したリクエストである
- apacheであればHTTP/2のモジュールが有効になっている
になります
これは今回トラブったサービスで全てはまりました
参考サイトにもあるように
レスポンスヘッダ情報に
Upgrade: h2,h2c
が含まれているとレスポンスが正常に受け取れず表示されないという事象でした
ブラウザの開発ツールで確認するとネットワークでエラーが出ているのがわかり
こんなエラーが出ていました
Failed to load resource: 操作を完了できませんでした。 プロトコルエラー
参考サイトにもあるように
http2モジュールを無効にして解決しています
参考サイトはyum updateによる上書きがされないように確認したりしていますが
新規リリースしてトラブったので即
vim /etc/httpd/conf.modules.d/10-h2.conf
# LoadModule http2_module modules/mod_http2.so
で解決しちゃいました
ELB配下で利用する場合には不要な Amazon Linux2 のmod_http2 モジュール 無効化により僅かながらもトラフィックやEC2リソースの節約にもなったと推測されます。
参考サイトのここの部分は私には理解できませんでしたが、本当にぴったりの記事を書いていただいていて感謝でした!!
コメント
コメントを投稿