У меня есть 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 перенаправлен в эту систему, чтобы ее можно было должным образом передать внутренним системам.