Mam odwrotny serwer proxy nginx, który pośredniczy w żądaniach od zewnętrznego ELB amazona do wewnętrznych ELB.
Mam 6 instancji zaplecza, które obsługują żądania. Konfiguracje z obsługą witryny wyglądają tak, ale istnieją różne numery portów i proxy_pass. Wszystko inne jest identyczne:
server {
listen 3000;
location / {
proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
include /etc/nginx/proxy.conf;
}
}
Raz na około 24 godziny jedna z konfiguracji przestaje działać. Wszystkie pozostałe proxy działają poprawnie. Jeśli zrestartuję nginx, wszystkie konfiguracje znów będą działać. Nie ma nic w error.log, nic dziwnego w dzienniku dostępu, syslog lub dmesg.
Czy to coś wiadomo? Czy zrobiłem coś złego z konfiguracjami proxy? Czy są jeszcze jakieś dzienniki, w których mogę zajrzeć?
nginx
reverse-proxy
user202172
źródło
źródło
Odpowiedzi:
Odpowiedź na to pytanie jest taka, że ELB czasami zmieniają adresy IP, a nginx rozpoznaje nazwy podczas startu.
Aby to naprawić, zawsze jest serwer DNS w twoim VPC na 0.2. Jeśli więc lokalny CIDR IP to 10.0.0.0/16, serwer DNS ma 10.0.0.2.
Dodaj to do konfiguracji nginx.
Parametr proxy_pass należy również zdefiniować jako zmienną, w przeciwnym razie nginx rozwiąże go tylko raz. Tak więc w oparciu o powyższą konfigurację jest to poprawna konfiguracja:
źródło
Jeśli Twój proxy_pass nie przeszedł bezpośrednio do jednego adresu URL, jak pokazuje twój przykład ( http://amazonaws.com ), ale zamiast tego do farmy pośredniej proxy, jak poniżej:
Wtedy będziesz mniej zaniepokojony chwilowym upadkiem jednego z potoków. Ponieważ wszyscy będą wykonywać tę samą pracę. Jeśli ktoś nie udzieli odpowiedzi, następny będzie proxy dla tej odpowiedzi. Święty spokój.
Nginx automatycznie pominie uszkodzoną maszynę przez x sekund. Dopóki go nie naprawisz lub dopóki nie powróci sam. ( http://wiki.nginx.org/HttpUpstreamModule )
Niezależnie od przyczyny zakłóceń, poprzez dystrybucję ich na farmie wydobywczej, przekształca się to w łatwiejszą konfigurację.
źródło