- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток!
Имеется 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;
}
}
Какие могут быть варианты?
Доброго времени суток!
1. статика на обоих серверах для тестового виртуального хоста стала обрабатываться апачем;
Неудивительно, вы ж запросы со второй машины в апач вливаете.
2. вместо IP клиента на S2 передается IP S1. При этом на связке nginx-apache на S2 IP бекэнду передается нормально.
Неудивительно, апач поди с mod_rpaf, а X-Forwarded-For вы не передаете nginx-ом с первой машины на вторую.
Неудивительно, вы ж запросы со второй машины в апач вливаете.
Так ведь в настройках виртуального хоста указано, что nginx должен обрабатывать статику. Мне нужно, чтобы nginx на первом сервере самостоятельно её обрабатывал. И почему на своем же сервере статику тоже стал обраратывать апач?
Неудивительно, апач поди с mod_rpaf, а X-Forwarded-For вы не передаете nginx-ом с первой машины на вторую.
А как их передавать на вторую машину? В документации не могу найти...
Чтение логов поможет решить проблему
А документация с примером тут: http://sysoev.ru/nginx/docs/example.html
Так ведь в настройках виртуального хоста указано, что nginx должен обрабатывать статику. Мне нужно, чтобы nginx на первом сервере самостоятельно её обрабатывал. И почему на своем же сервере статику тоже стал обраратывать апач?
А как их передавать на вторую машину? В документации не могу найти...
Каюсь, был неправ, продуплил момент с обоими серверами.
nginx вообще перезапускается? nginx -t что говорит?
Господа, виноват...
Статику nginx обрабатывает в обоих случаях. Просто там в коде пара картинок прописаны, которых физически на сервере нет. Вот о них в логах апача и появлялись записи. Недоглядел. Извиняюсь, что отнял ваше время по этому вопросу.
А вот вопрос про IP остается открытым.
Nginx на апач на своем сервере передает IP клиента без проблем. А удаленный апач на втором сервере видит только IP первого сервера. При этом на втором сервере стоит свой nginx, который на апач без проблем передает IP клиента. На апаче стоит, как верно заметил ув. Outsourcenow, mod_rpaf.
Куда капать - не знаю, опыта мало.
Outsourcenow, nginx перезапускается без проблем, nginx -t пишет, что все отлично:
По моей ссылке пример конфига смотрели?
Andreyka, смотрел.
А что там должно интересовать?
Например, это у меня есть:
А что еще? Там к передаче IP, кажется, больше ничего и не относится...
у бэкенда (apache) установлен mod_rpaf?
на втором сервере 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%, что бывает очень удобно на разном по производительности железе.
Himiko, да, mod_rpaf на апаче второго сервера установлен. Более того, со своим nginx'ом (который стоит на этом же сервере) проблем по передаче IP нет.
qwartyr, на втором сервере nginx в работе тестового домена не участвует, т.к. nginx первого сервера передает запрос напрямую апачу второго сервера: 222.222.222.222:8000 (apache висит на 8000 порте, а nginx, соответственно, на 80).
P.S. За совет большое спасибо! Элементарно, а я сам бы не догадался :)