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”は必要だった。

参考:

おわり

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

Set your Twitter account name in your settings to use the TwitterBar Section.