Моя шпаргалка :)

Мануалы и настройки => Настройки *nix (почта, web, система etc) => Тема начата: George от Фев. 02, 2024, 12:22

Название: Проброс real ip в nginx за haproxy
Отправлено: George от Фев. 02, 2024, 12:22
Довольно часто требуется балансировать нагрузку между несколькими веб-серверами. При этом, как правило, необходимо, чтобы веб-приложения получали реальные IP-адреса клиентов, а не IP балансировщика.

В случае балансировки и терминации HTTP(S)-трафика на HAProxy (Layer 7 [1]) данная задача легко решается добавлением заголовка "X-Real-IP" и его обработкой на Nginx при помощи модуля ngx_http_realip_module [2]. При балансировке TCP-трафика от HTTPS-клиентов и передаче его на веб-сервера напрямую без модификации или терминации (Layer 4 [3]) добавить данный заголовок невозможно, поэтому требуется воспользоваться возможностями, предоставляемыми Proxy Protocol [4, 5, 6].

Рассмотрим оба варианта (балансировка L7 и L4) на примере выдержек из конфигурационных файлов haproxy 1.5.9 и nginx 1.6.2

Балансировка на прикладном уровне (Layer 7): терминация HTTPS-трафика на HAProxy и передача по HTTPS на Nginx

В данном примере HTTPS-трафик от клиента терминируется на HAProxy, модифицируется и передается на Nginx так же по HTTPS.

Извините, вам запрещён просмотр содержимого спойлеров.




Извините, вам запрещён просмотр содержимого спойлеров.

Название: От: Проброс real ip в nginx за haproxy
Отправлено: George от Фев. 02, 2024, 12:40
В данном примере HTTPS-трафик клиентов не модифицируется (HAProxy вмешивается в транспортный уровень) и его терминация происходит непосредственно на Nginx.

haproxy.cfg

Извините, вам запрещён просмотр содержимого спойлеров.


nginx.conf

Извините, вам запрещён просмотр содержимого спойлеров.


Я этот вариант не пробовал, поскольку при таком варианте, как я понимаю, сертификат будет запрашиваться с хоста. А мне, при том, что у меня letsencrypt сертификаты обновляет сам haproxy это не удобно. Ведь на самом сервере они не обновятся, надо будет изобретать скрипт перезаписи сертификатов и перезапуска nginx))