一部のnginxリバースプロキシ設定が1日に1回機能しなくなる


12

外部のAmazon ELBから内部ELBにリクエストをプロキシするnginxリバースプロキシがあります。

要求を処理する6つのバックエンドインスタンスがあります。サイト対応の構成はこのように見えますが、異なるポート番号とproxy_passがあります。他のすべては同一です:

server {
    listen 3000;
    location / {
            proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
            include /etc/nginx/proxy.conf;
    }

}

24時間ごとに1回、構成の1つが機能しなくなります。他のすべてのプロキシは正常に動作します。nginxを再起動すると、すべての構成が再び機能します。error.logには何も、アクセスログ、syslog、またはdmesgには奇妙なものは何もありません。

これは何か知られていますか?プロキシ設定で何か間違ったことをしましたか?調べることができる他のログはありますか?



回答:


22

この質問に対する答えは、ELBは時々IPアドレスを変更し、nginxは起動時に名前解決を行うということです。

これを修正するために、VPCには常に0.2のDNSサーバーがあります。したがって、ローカルIP CIDRが10.0.0.0/16の場合、DNSサーバーは10.0.0.2にあります。

これをnginx構成に追加します。

resolver 10.0.0.2 valid=10s;

proxy_passも変数として定義する必要があります。そうしないと、nginxは一度だけ解決します。したがって、上記の構成に基づいて、これが正しい構成になります。

server {
    listen 3000;
    location / {
            resolver 10.0.0.2 valid=10s;
            set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000"
            proxy_pass $backend;
            include /etc/nginx/proxy.conf;
    }
}

proxy_pass設定で変数をサポートしているnginxのバージョンを知っている人はいますか?私は、Elastic Beanstalkで(nginxのバージョン1.6.2)にしようとしていると、それはとにかく変数を受け入れることを望んでいない私はそれを置く。
スティーブンC

これをありがとう、文字通り約1か月間私たちを夢中にさせてくれました!
ジムR

nginxブロックの繰り返しに関するこの記事は、この構成もエコーします。nginx.com/blog/dns-service-discovery-nginx-plus
モーガンクリスチャンソン

1

proxy_passが例のように1つのURL(http://amazonaws.com)に直接渡されず、代わりに次のようなプロキシアップストリームファームに渡された場合:

upstream my_upstream {
 server1 127.0.0.1:1337;
 server2 127.0.0.1:1338; 
}
location / {
 proxy_pass         http://my_upstream;
}

その後、アップストリームの1つが一時的に失敗することについて心配する必要がなくなります。彼らはすべて同じ仕事をしているからです。応答に失敗した場合、その応答に対して次のプロキシがプロキシされます。心の平和。

Nginxは、故障したマシンをx秒間自動的にスキップします。あなたがそれを修理するまで、またはそれ自体で戻るまで。(http://wiki.nginx.org/HttpUpstreamModule

そのため、中断の理由が何であれ、それらを上流のファームに配布することで、より簡単なセットアップに変換されます。


お返事をありがとうございます!奇妙なことは、バックエンドインスタンスにリクエストを直接行うことができるが、nginxを介してはできないことです。nginxを再起動すると、リクエストは再びプロキシされます。これは既に実稼働環境にあるので、構成の1つが「アンロード」されているように見える理由、またはnginxが実際に舞台裏で何をしているのかを見つける方法を本当に知りたいです。
user202172

その後、もっとnginxのログ情報を探したいかもしれません。これは、誰かがあなたのように、「断続的な問題[...]私がプロキシを使用している」ことを調べようとした問題です。それが役に立てば幸い。
user18099
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.