Ore no homepage
nginxの背後にELBがいて、proxy_pass https://xxx.yyy.comみたいに指定していたんだが、突然クライアントにHTTP 499が返却されてしまうという事案が発生した。なおこの記事の対象はnginx1.8系とnginx1.6系。調べたところによると割とみんなよくハマる定期ネタのようだ。
どういうことか
nginxの仕様としてproxy_passに名前を使っている場合、その名前解決はnginx起動時に行われる。そしてそのときに取得したIPはnginxにキャッシュされてnginxの再起動もしくはHUPを受け取るまで解放されない。
なのでELBのようにIPが変化するものをnginxの後段に置くときは注意する。
proxy_pass https://xxx.yyy.com;
だけでなく、resolverでDNSとそのキャッシュのexpireを指定、さらにset $xxxでホスト名を変数にセットする必要がある。
resolver 10.0.0.2 valid=5s;
set $endpoint “xxx.yyy.com”;
proxy_pass https://$endpoint;
下記の参考欄を見ると、set $endpoint “xxx.yyy.com”を入れていないケースがあるが、nginx1.8系、1.6系で試したところ、set$endpoint “xxx.yyy.com”は必要だった。
参考:
- NginxとInternalELBとのDNS名前解決方法
- Nginx のDNS 名前解決とS3 やELB へのリバースプロキシ
- Nginxと名前解決の話
- Nginxでproxy_passにホスト名を書いた時の名前解決のタイミング
Information
welcome!Top Posts
- - 開発支援系のサービスが充実しすぎて転職か廃業を考えた [33,823 views]
- - MySQL ibdata1が肥大化する理由(記事の意訳) [15,492 views]
- - vm.swappiness=0は重要 [12,353 views]
- - serverspec インフラ層のテスト項目を考える [11,867 views]
- - MySQL バイナリログを使ったデータリカバリ [11,100 views]
- - about [10,656 views]
- - Cassandraメモその1(インストール、データモデル、データ操作について) [8,412 views]
- - MySQL 容量確保のためのデータ削除方式 [7,690 views]
- - Mac OSX開発環境構築メモ、便利なツールとか [7,390 views]
- - chefを捨ててシェルスクリプトにした [7,230 views]
Archives
- 2015年10月 (1)
- 2015年6月 (3)
- 2015年5月 (3)
- 2015年4月 (3)
- 2015年2月 (1)
- 2015年1月 (1)
- 2014年12月 (2)
- 2014年11月 (1)
- 2014年10月 (1)
- 2014年9月 (2)
- 2014年8月 (3)
- 2014年6月 (2)
- 2014年5月 (3)
- 2014年4月 (2)
- 2014年3月 (3)
- 2014年1月 (1)
- 2013年12月 (3)
- 2013年11月 (2)
- 2013年10月 (3)
- 2013年8月 (1)
- 2013年7月 (2)
- 2013年6月 (1)
- 2013年5月 (3)
- 2013年4月 (3)
- 2013年3月 (4)
- 2013年2月 (2)
- 2013年1月 (2)
- 2012年12月 (3)
- 2012年11月 (1)
- 2012年10月 (4)
- 2012年9月 (1)
- 2012年7月 (3)
- 2012年6月 (2)
- 2012年5月 (1)
- 2012年4月 (2)
- 2012年3月 (1)
- 2012年2月 (1)
- 2012年1月 (1)
- 2011年11月 (4)