Ответы пользователя по тегу HAproxy
  • Как настроить HTTPS прокси сервер на одном IP, что backend сервера видели IP клиента?

    @sevnet Автор вопроса
    Системный аналитик, бизнес-консультант
    Взлетело, и полёт нормальный.
    Ivan Ustûžanin - подсказал ссылки, там почти всё что нужно, но кое-то было не очевидно, сейчас про это напишу.

    В общем вся конструкция строится на технологии Proxy Protocol специально для этого кейса разработанной.

    Для настройки потребуется настроить 3 вещи:
    1. NGINX сервер frontend (первично принимающий весь трафик от роутера, либо напрямую из интернет).
    2. NGINX или Apache (или другие) сервер backend.
    3. ОБЯЗАТЕЛЬНО! Прописать в файле /etc/hosts на backend серверах сопоставление доменов с frontend сервером (именно frontend!). Если при этом требуется, чтобы сервер мог обращаться ещё и сам к себе по некоторому доменному имени (это надо например push-server в Битрикс), то надо прописать любое выдуманное имя хоста в /etc/hostname, и отдельной записью прописать его на локальный IP в /etc/hosts

    1. Конфиг на стороне NGINX Reverse Proxy (он же frontent):
    NGINX должен быть собран с модулями:
    --with-stream_ssl_module
    --with-stream_ssl_preread_module
    --with-stream_realip_module


    user www-data;
    worker_processes auto;
    worker_rlimit_nofile 10240;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
        use epoll;
    	worker_connections 30720;
    	multi_accept on;
    }
    stream {
        proxy_protocol on; #обязательно включаем, без него IP адреса из приходящего SSL трафика не передать дальше
        map $ssl_preread_server_name $name {
            siteone.ru                  so;
            sitetwo.ru            		st;
            sitetree.ru           		str;
        }
    	#bitrix1
        upstream so80 {
                server 192.168.0.100:80;
                }
        upstream so443 {
                server 192.168.0.100:443;
                }
        upstream so8893 {
                server 192.168.0.100:8893;
                }
        upstream so8894 {
                server 192.168.0.100:8894;
                }
    	#bitrix2
        upstream st80 {
                server 192.168.88.114:80;
                }
        upstream st443 {
                server 192.168.88.114:443;
                }
        upstream st8893 {
                server 192.168.88.114:8893;
                }
        upstream st8894 {
                server 192.168.88.114:8894;
                }
    	#web site
        upstream str80 {
                server 192.168.88.102:80;
                }
        upstream str443 {
                server 192.168.88.102:443;
                }
    			
    	#web traffic		
    	server {
                listen 80;
                proxy_pass ${name}80;
              }
        server {
                listen 443;
                proxy_pass ${name}443;
                ssl_preread on;
             }
    		 
    	#push&pull bitrix
        server {
                listen 8893;
                proxy_pass ${name}8893;
               }
        server {
                listen 8894;
                proxy_pass ${name}8894;
                ssl_preread on;
                }
    }


    2. Конфиг на стороне принимающего сервера (backend).
    1. Для каждого слушаемого порта в директиву listen дописываем proxy_protocol, иначе вообще не заработает.
    Должно получиться что-то типо
    server {
        listen 443 default_server ssl proxy_protocol;
        ...
        proxy_set_header X-Real-IP       $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        ...
    }

    2. Для отлова IP адреса клиента прописываем в директиве http
    http {
        set_real_ip_from #IP вашего frontend#;
        real_ip_header proxy_protocol;
    }

    3. Сделать записи в/etc/hosts как описано выше.
    Ответ написан
    Комментировать