Portál AbcLinuxu, 6. května 2025 16:48

Dotaz: nginx a vlastni resolver nebo přes loadbalancer AWS

18.11.2015 22:07 JardaH
nginx a vlastni resolver nebo přes loadbalancer AWS
Přečteno: 269×
Odpovědět | Admin
Zdravím,

hraju si s nastavením nginxu, ale jedna věc nefunguje úplně podle mých představ.

Nastavil jsem resolver na 127.0.0.1, kde mi běží dnsmasq, nginx pak při requestu na 'location /path' zapracuje jako proxy na určitý hostname (ten je definovaný v /etc/hosts), ale původně vedl na loadbalancer AWS.

To sice funguje, ale ve chvíli, kdy dnsmasq shodím a není možné jakkoli vrátit adresu toho hostnamu (dnsmasq neběží, v /etc/hosts nic není, takže ping/dig/genent hosts vrací chybu nebo nic), tak nginx stále vrací tu stránku z neexistujícího hostnamu... Tady bych předpokládal, že vrátí nějakou chybu, ale vše se tváří, že funguje. Pokud v tuhle chvíli nginx restartuju, tak skončí s chybou o tom, že 'host not found in upstream'.

Taky jsem vyzkoušel, pustit nginx, vypnout dnsmasq, změnit záznam v /etc/hosts, pustit dnsmasq, a ověřit že dig na dnsmask vrátí novou IP adresu, ale opět se vracela ta stránka z původní IP adresy. To znamená, že nginx zřejmě nějak sám cachuje IP adresy...

Hrál jsem si s nastavením: resolver 127.0.0.1 valid=10s; a resolver_timeout 5s;

Začal jsem se v tom vrtat, protože se občas stávalo, že load balancer AWS změnil IP adresu a nginx přestal fungovat a rozjel se až po restartu daemona. Takže jsem se v to začal analyzovat a zatím nic moc netuším...

Díky za rady,

JardaH
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.11.2015 16:05 JardaH
Rozbalit Rozbalit vše Re: nginx a vlastni resolver nebo přes loadbalancer AWS
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak řešení se našlo:

https://www.jethrocarr.com/2013/11/02/nginx-reverse-proxies-and-dns-resolution/

Problém je ten, že nginx si uloží IP adresy definovaných hostnamů při spuštění a po dobu jeho běhu si je už nekontroluje, i přesto že resolver je nastaven.

Řešení je definovat hostname jako proměnnou a pak se bude ptát i v průběhu:

set $hostname "http://loadbalancer";
proxy_pass $hostname;

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.