ngx_http_upstream, статика и IP

12
V
На сайте с 28.02.2008
Offline
14
1914

Доброго времени суток!

Имеется 2 сервера. На каждом стоит LAMP + nginx и работают свои проекты. Один сервер S1 очень нагружен, а второй S2 на 5%. Планируется делать репликацию БД (но сейчас не об этом), а балансировку осуществлять средствами nginx, используя возможности модуля ngx_http_upstream.

Сейчас тестирую балансировку на примере сайтика на PHP без БД.

Для этого в настройках nginx на S1 указал, что нужно попеременно обращаться то к своему внутреннему бекэнду, то к внешнему на S2.

Всё заработало быстро, но появилась пара проблем.

1. статика на обоих серверах для тестового виртуального хоста стала обрабатываться апачем;

2. вместо IP клиента на S2 передается IP S1. При этом на связке nginx-apache на S2 IP бекэнду передается нормально.

На обоих серверах стоят nginx 0.6.29 и apache 2.2.8.

Вот настройки ngx_http_upstream из конфига nginx:

upstream  backend  {

server 111.111.111.111:8000;
server 222.222.222.222:8000;
}

Вот настройки тестируемого виртуального сервера в nginx на S1:

	server {

listen 111.111.111.111:80;
server_name test.domain.ru www.test.domain.ru;
location / {
proxy_pass http://backend;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico)$ {
root /home/www/test;
}
}

Какие могут быть варианты?

O
На сайте с 13.08.2008
Offline
26
#1
vibro:
Доброго времени суток!

1. статика на обоих серверах для тестового виртуального хоста стала обрабатываться апачем;

Неудивительно, вы ж запросы со второй машины в апач вливаете.


2. вместо IP клиента на S2 передается IP S1. При этом на связке nginx-apache на S2 IP бекэнду передается нормально.

Неудивительно, апач поди с mod_rpaf, а X-Forwarded-For вы не передаете nginx-ом с первой машины на вторую.

Outsourcenow.ru: оттюним ваш веб-сервер. 100 млн. запросов в сутки - наш размерчик!
V
На сайте с 28.02.2008
Offline
14
#2
Outsourcenow:
Неудивительно, вы ж запросы со второй машины в апач вливаете.

Так ведь в настройках виртуального хоста указано, что nginx должен обрабатывать статику. Мне нужно, чтобы nginx на первом сервере самостоятельно её обрабатывал. И почему на своем же сервере статику тоже стал обраратывать апач?

Outsourcenow:
Неудивительно, апач поди с mod_rpaf, а X-Forwarded-For вы не передаете nginx-ом с первой машины на вторую.

А как их передавать на вторую машину? В документации не могу найти...

Andreyka
На сайте с 19.02.2005
Offline
822
#3

Чтение логов поможет решить проблему

А документация с примером тут: http://sysoev.ru/nginx/docs/example.html

Не стоит плодить сущности без необходимости
O
На сайте с 13.08.2008
Offline
26
#4
vibro:
Так ведь в настройках виртуального хоста указано, что nginx должен обрабатывать статику. Мне нужно, чтобы nginx на первом сервере самостоятельно её обрабатывал. И почему на своем же сервере статику тоже стал обраратывать апач?
А как их передавать на вторую машину? В документации не могу найти...

Каюсь, был неправ, продуплил момент с обоими серверами.

nginx вообще перезапускается? nginx -t что говорит?

V
На сайте с 28.02.2008
Offline
14
#5

Господа, виноват...

Статику nginx обрабатывает в обоих случаях. Просто там в коде пара картинок прописаны, которых физически на сервере нет. Вот о них в логах апача и появлялись записи. Недоглядел. Извиняюсь, что отнял ваше время по этому вопросу.

А вот вопрос про IP остается открытым.

Nginx на апач на своем сервере передает IP клиента без проблем. А удаленный апач на втором сервере видит только IP первого сервера. При этом на втором сервере стоит свой nginx, который на апач без проблем передает IP клиента. На апаче стоит, как верно заметил ув. Outsourcenow, mod_rpaf.

Куда капать - не знаю, опыта мало.

Outsourcenow, nginx перезапускается без проблем, nginx -t пишет, что все отлично:

the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok

configuration file /usr/local/etc/nginx/nginx.conf test is successful
Andreyka
На сайте с 19.02.2005
Offline
822
#6

По моей ссылке пример конфига смотрели?

V
На сайте с 28.02.2008
Offline
14
#7

Andreyka, смотрел.

А что там должно интересовать?

Например, это у меня есть:

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

А что еще? Там к передаче IP, кажется, больше ничего и не относится...

Himiko
На сайте с 28.08.2008
Offline
560
#8

у бэкенда (apache) установлен mod_rpaf?

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
qwartyr
На сайте с 19.10.2007
Offline
40
#9

на втором сервере nginx выставляет через proxy_set_header айпи-адрес первого сервера, с nginxa которого пришел запрос, и передает его апачу при проксировании, там rpaf его отрабатывает и на выходе в апачевых логах на все запросы айпи адрес первого сервера, ситуация понятна.

Да кстати, уважаемый ТС, если вы вместо

upstream backend {

server 111.111.111.111:8000;

server 222.222.222.222:8000;

}

напишите

upstream backend {

server 111.111.111.111:8000;

server 222.222.222.222:8000;

server 222.222.222.222:8000;

server 222.222.222.222:8000;

}, то запросы на первый и второй сервер пойдут в соотношении 25% к 75%, что бывает очень удобно на разном по производительности железе.

профессиональное администрирование серверов (http://www.unixsupport.ru) отзывы (http://www.free-lance.ru/users/qwartyr/opinions/) на free-lance.ru
V
На сайте с 28.02.2008
Offline
14
#10

Himiko, да, mod_rpaf на апаче второго сервера установлен. Более того, со своим nginx'ом (который стоит на этом же сервере) проблем по передаче IP нет.

qwartyr, на втором сервере nginx в работе тестового домена не участвует, т.к. nginx первого сервера передает запрос напрямую апачу второго сервера: 222.222.222.222:8000 (apache висит на 8000 порте, а nginx, соответственно, на 80).

P.S. За совет большое спасибо! Элементарно, а я сам бы не догадался :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий