Комментарии 14
Как вовремя! Спасибо :)
А какая у вас схема кластера? Интересно один ли балансировщик или используется два (три) сервера с HAProxy? И как они перехватывают управление?
А можно просто использовать LVS (linux virtual server) в режиме DR (direct routing) и не нести накладных расходов в юзерспейсе и не иметь таких проблем вообще — адрес будет оригинальный на nginx-е.
Правильно ли я понимаю, что способ маршрутизации на 4 уровне производительнее, но дает меньшую гибкость и работает не со всеми бэкэндами?
Не совсем так. В статье я показал как можно воспользоваться расширением proxy protocol, если frontend и backend его поддерживают. Без proxy protocol TCP-балансировку можно настроить на любой tcp-сервис, будь то FTP, IMAP, SQL и т.п.
И, пожалуй следует отметить, что в HAProxy так же можно использовать смешанную (http/tcp) маршрутизацию и балансировку [*]:
Таким образом можно, к примеру, расположить на 80 порту одновременно и веб-сервер и сервер SSH.
И, пожалуй следует отметить, что в HAProxy так же можно использовать смешанную (http/tcp) маршрутизацию и балансировку [*]:
frontend mixed_frontend
bind :80
mode tcp
option tcplog
tcp-request inspect-delay 5s
tcp-request content accept if HTTP
use_backend http_backend if HTTP
default_backend tcp_backend
backend tcp_backend
# tcp-only config
backend http_backend
# http-only config
mode http
Таким образом можно, к примеру, расположить на 80 порту одновременно и веб-сервер и сервер SSH.
А с HTTP протоколом оно действительно работать не должно, или я какой-то глюк словил?
nginx ругался ошибкой 400 при пустых логах. Отключаю send-proxy или перевожу haproxy в http режим — всё ок.
nginx ругался ошибкой 400 при пустых логах. Отключаю send-proxy или перевожу haproxy в http режим — всё ок.
В Nginx обычно помогает увеличить уровень логированная до Debug.
Так же очень важно, чтобы одновременно с send-proxy на HAProxy был включен proxy_protocol на Nginx.
Так же очень важно, чтобы одновременно с send-proxy на HAProxy был включен proxy_protocol на Nginx.
Попробую, но даже в access_log ничего не писалось, а там уровней логирования нет, насколько я знаю.
Включено было с обеих сторон естественно. Для HTTPS части сервера описанный тут метод у меня замечательно заработал. Хотел его же для HTTP применить.
Включено было с обеих сторон естественно. Для HTTPS части сервера описанный тут метод у меня замечательно заработал. Хотел его же для HTTP применить.
Вот тут описывается схожий случай, но причину ошибочного поведения так и не нашли:
trac.nginx.org/nginx/ticket/650
trac.nginx.org/nginx/ticket/650
Жаль, что Tomcat не понимает proxy protocol. Ищу возможность балансировки через tcp mode для Tomcat. Используется проприетарный протокол.
Пока все тщетно
Пока все тщетно
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Получаем IP-адреса HTTPS-клиентов с HAProxy (frontend) на Nginx (backend) в режимах HTTP и TCP-балансировки