Титла: Nginx Load balancing - 400 bad request Request Header Or Cookie Too Large Публикувано от: Ali Nebi в Nov 05, 2012, 23:48 Здравейте,
Правя едни тестове с nginx свързани с load balancing и прокси към апаче. Имам следната конфигурация: server 1 nginx load balancing: upstreams: 127.0.0.1:8080; ( proxy to apache installed on same server) server2; (nginx on server2) server3 backup; (nginx on server 3) server2: nginx load balancing: upstreams: 127.0.0.1:8080; (apache installed on same server) server1; (nginx on server1) server3 backup; (nginx on server 3) Server 3 (Backup server - да поеме трафика, единствено ако Сървър 1 и 2 не работят): Load balancing: upstreams: 127.0.0.1:8080; (apache installed on same server) server1; (nginx on server 1) server2; (nginx on server 2) Теста, който правя е следния: 1. На Сървър1 оставям работещ nginx и спирам апаче там 2. На Сървър2 оставям работещ nginx и спирам апаче там 3. На Сървър3 оставям работищи и nginx и апаче. Очакван резултат - сайта да се покаже без проблем, като се обслужи от Сървър 3. Това, което се случва обаче е, че вместо сайта, получава 400 Bad Request Request Header Or Cookie Too Large Опитвам се да разбера защо това се случва, защото ако на Сървър 2 апаче е пуснат, то Сървър 2 обслужва сайта и си работи без проблеми. Ще се радвам ако ми дадете някакви идеи и насоки как да реша въпросния проблем. Ако имате нужда от конфигурациите, мога да ги постна. Благодаря Ви предварително. Титла: Re: Nginx Load balancing - 400 bad request Request Header Or Cookie Too Large Публикувано от: neter в Nov 06, 2012, 00:00 Ако имате нужда от конфигурациите, мога да ги постна.Ами постни ги, не се свени. Без тях в тази ситуация търсиш помощ от ясновидци :) Титла: Re: Nginx Load balancing - 400 bad request Request Header Or Cookie Too Large Публикувано от: Ali Nebi в Nov 06, 2012, 00:15 Тъкмо това подготвях с малко инфо от логовете, изпревари ме :)
gdo1 с вътрешно ip: 10.10.10.1 (Сървър 1) gdo2 с вътрешно ip: 10.10.10.2 (Сървър 2) gdo3 с вътрешно ip: 10.10.10.3 (Сървър 3 - backup server) Свързаността между сървърите е наред. Сървър1: nginx.conf Код: user www-data; proxy_params еднакъв на всички сървъри Код: proxy_set_header Host $host; Сървър 2 nginx.conf - различава се само частта, която е за upstream от Сървър 1 Код: # The Apache load balancing proxy targets for port 80 traffic Сървър 3: nginx.conf - различава се само частта, която е за upstream от Сървър 1 Код: # The Apache load balancing proxy targets for port 80 traffic nginx vhost на всички сървъри Код: server { Това, което виждам в логовете: Сървър1: Код: 2012/11/05 23:00:00 [error] 17941#0: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 10.10.10.2, server: mydomain.tld, request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:8080/", host: "mydomain.tld" Сървър 2 logs: Код: 2012/11/05 23:00:31 [error] 6613#0: *3413 connect() failed (111: Connection refused) while connecting to upstream, client: 10.10.10.1, server: mydomain.tld, request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:8080/", host: "mydomain.tld" П.С. Това, което виждам сега като пуснах дебъга на nginx е че се 10.10.10.1 и 10.10.10.2 зациклят помежду си някак и X-Forwarded-For хедъра става по-голям и по-голям, докато не достигне лимита си. Ето парче от лога: Код: X-Real-IP: 10.10.10.2 П.С.2 Ако съм пропуснал нещо само кажете :) Титла: Re: Nginx Load balancing - 400 bad request Request Header Or Cookie Too Large Публикувано от: Ali Nebi в Nov 06, 2012, 01:28 Изглежда улучвам същия този бъг или подобен: http://trac.nginx.org/nginx/ticket/142
anebi@gdo2 /etc/nginx/sites-enabled # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.1 LTS Release: 12.04 Codename: precise anebi@gdo2 /etc/nginx/sites-enabled # uname -a Linux gdo2 3.2.30custom #1 SMP Thu Nov 1 13:53:54 CET 2012 x86_64 x86_64 x86_64 GNU/Linux anebi@gdo2 /etc/nginx/sites-enabled # dpkg -l | grep nginx ii nginx 1.1.19-1ubuntu0.1 small, but very powerful and efficient web server and mail proxy ii nginx-common 1.1.19-1ubuntu0.1 small, but very powerful and efficient web server (common files) ii nginx-full 1.1.19-1ubuntu0.1 nginx web server with full set of core modules anebi@gdo2 /etc/nginx/sites-enabled # nginx -v nginx version: nginx/1.1.19 Титла: Re: Nginx Load balancing - 400 bad request Request Header Or Cookie Too Large Публикувано от: Ali Nebi в Nov 07, 2012, 13:27 Прегледах си топологията още веднъж и всъщност, това което правя не е правилно и причинявам зацикляне между сървърите.
Това, което в момента съм сетнал като upstreams на трите сървъра мисля, че е грешно. На сървъра, който пряко получава трафика от клиентите трябва да ги има и 3-те upstream-а сетнати, но на останалите два сървъра трябва да има само по един, който е 127.0.0.1:8080, защото така иначе се получава зацикляне. Така или иначе тафика винаги минава през първия сървър. При евентуален проблем с връзката към сървър 1 или ако целия сървър падне, трябва само failover ip-to да се превключи към другия сървър (Сървър 2 или Сървър 3). Друго решение да се предотврати зациклянето би било ако се сетва weight на 127.0.0.1:8080 upstream и нека ги има и 3-те upstream-а на трите сървъра или се спре round robin. Какво е вашето мнение? |