Собственно задача такая.
Есть один IP адрес, на нем висит 7 доменных имен, за ним стоят 7 серверов, абсолютно разношерстных, на разных ОС, на разных web-серверах и NGINX и apache, у каждого масса своих настроек.
Надо чтобы один Reverse proxy разруливать весь трафик по типу как маршрутизатор, но не по IP адресами, по доменном именам.
Собственно я уже такой и настроил на NGINX. Прописал всем сайтам
server {
listen 443 ssl;
server_name sd-info.ru www.site1.ru;
access_log /var/log/nginx/site1.ru.access.log;
error_log /var/log/nginx/site1.ru.error.log notice;
ssl_certificate /etc/letsencrypt/live/site1.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/site1.ru/privkey.pem; # managed by Certbot
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
location ~* {
proxy_ignore_client_abort on;
proxy_pass https://192.168.88.111;
proxy_redirect https://192.168.88.111 ~*;
proxy_set_header Host $host;
proxy_max_temp_file_size 0;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header HTTPS YES;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Но этот вариант оказался нерабочим, т.к. начались от разных владельцев всякого рода жалобы, кому-то надо параметр
client_max_body_size 20М;
другому
client_max_body_size 1024М;
третьему надо сжатие, четвертому нет, таймауты у всех разные, mime.types тоже разные, по пошло поехало, только что и приходится постоянно править всем настройки.
Пробовал настраивать через нотации upstream типо вот так:
map $ssl_preread_server_name $name {
site1.ru site1;
site2.ru site2;
}
upstream site1p80 {
server 192.168.88.231:80;
}
Но тут есть главный недостаток, конечные сервера не получают IP адрес клиентов, что требуется обязательно!
Попробовал настроить HAProxy, так же без наличия SSL сертификатов не работает маршрутизация по именам серверов:
global
maxconn 4096
chroot /var/lib/haproxy
uid 99
gid 99
daemon
defaults
log global
option redispatch
option tcp-smart-accept
option tcp-smart-connect
retries 3
maxconn 2000
timeout connect 5000
timeout check 3000
timeout client 50000
timeout server 50000
frontend http_frontend
bind *:80
mode http
redirect scheme https code 301 if !{ ssl_fc }
frontend https_frontend_ssl_pass
mode tcp
bind *:443
use_backend site1 if { ssl_fc_sni site1.ru }
use_backend site2 if { ssl_fc_sni site2.ru }
backend site1
mode tcp
server site1 192.168.88.102:443 send-proxy
backend site2
mode tcp
server site12 192.168.88.111:443 send-proxy
В общем я замучился конкретно.
Поделитесь, пожалуйста, опытом кто как решал эту проблему проксирования https с одного IP на несколько backend серверов, без установки TSL соединения, а прямиком на уровне Laeyr 4, а не Laeyr 7?