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

参考:

おわり

 

コメントを残す

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

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