Назад | Перейти на главную страницу

2 сервера, 1 общедоступный IP-адрес - внутреннее перенаправление поддомена

У меня есть 2 веб-сервера SSL и 1 публичный IP-адрес.

У меня есть TLD (example.com), я бы хотел перенаправить server1.example.com на внутренний сервер A, а server2.example.com - на внутренний сервер B.

Как бы я это сделал? Веб-серверы не являются IIS или Apache, но являются веб-приложениями управления, использующими порты 443.

Вы должны использовать обратный прокси (например, HAProxy, nginx, squid ...) перед этими двумя серверами. Привяжите общедоступный IP-адрес к внешнему интерфейсу прокси, а затем используйте расширение SNI SSL для маршрутизации трафика по имени домена на внутренние серверы.

Пример HAProxy (https://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/):

# Adjust the timeout to your needs
defaults
  timeout client 30s
  timeout server 30s
  timeout connect 5s

# Single VIP 
frontend ft_ssl_vip
  bind 10.0.0.10:443
  mode tcp

  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }

  default_backend bk_ssl_default

# Using SNI to take routing decision
backend bk_ssl_default
  mode tcp

  acl application_1 req_ssl_sni -i application1.domain.com
  acl application_2 req_ssl_sni -i application2.domain.com

  use-server server1 if application_1
  use-server server2 if application_2
  use-server server3 if !application_1 !application_2

  option ssl-hello-chk
  server server1 10.0.0.11:443 check
  server server2 10.0.0.12:443 check
  server server3 10.0.0.13:443 check

Как заявил пользователь373333, вам нужно будет использовать что-то для прослушивания на границе и прокси в сети.

Они использовали haproxy, Я предпочитаю nginx потому что вы можете обслуживать SSL индивидуально, немного лучше контролировать сертификаты и меньше хаоса, потому что вы можете настраивать сайты индивидуально. Это, и я гораздо больше знаком с nginx чем haproxy для этого - у нас должно было быть такое развертывание на определенной части программного обеспечения, которое мы развернули, где у нас был один входящий IP-адрес для веб-трафика, и все, но у нас было восемь или девять страниц веб-администрирования на внутренних серверах с IP-адресами.

В зависимости от вашей ОС, которую я бы назвал выделенной внешней системой, вы должны установить nginx.

Добавьте следующие строфы в конец вашего nginx.confс http раздел, который теоретически должен быть в /etc/nginx; обновите их соответствующим образом для своих доменов:

# First Server
server {
    listen 443 ssl;

    server_name server1.example.com;

    ssl_certificate /path/to/SSL/cert;
    ssl_certificate_key /path/to/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    location / {
        add_header X-Forwarded-For $remote_ip
        add_header X-Forwarded-Proto https;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        proxy_pass https://internal.ip.address.1:443/;
    }
}

# Second Server
server {
    listen 443 ssl;

    server_name server2.example.com;

    ssl_certificate /path/to/SSL/cert;
    ssl_certificate_key /path/to/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    location / {
        add_header X-Forwarded-For $remote_ip
        add_header X-Forwarded-Proto https;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        proxy_pass https://internal.ip.address.2:443/;
    }
}

# Catch all for all other responses, return 410 GONE message.
server {
    listen 80 default_server;
    listen 443 default_server;

    server_name server1.example.com;

    ssl_certificate /path/to/a/bogus/self-signed/SSL/cert;
    ssl_certificate_key /path/to/a/bogus/self-signed/SSL/cert/privkey;

    # Secure SSL configs
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_dhparam /etc/ssl/dhparam.2048.pem; # To protect against LOGJAM

    return 410;
}

Вам нужно будет бежать openssl dhparam -out /etc/ssl/dhparam.2048.pem 2048 либо как суперпользователь, либо с sudo, в зависимости от вашей системы, но как только вы это сделаете и получите dhparam.2048.pem После создания файла вы можете перезапустить процесс NGINX в своей системе и протестировать свои сайты. Убедитесь, что весь трафик портов 80 и 443 перенаправлен в эту систему, чтобы ее можно было должным образом передать внутренним системам.