Comments 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. Используется проприетарный протокол.
Пока все тщетно
Пока все тщетно
Sign up to leave a comment.
Получаем IP-адреса HTTPS-клиентов с HAProxy (frontend) на Nginx (backend) в режимах HTTP и TCP-балансировки