У меня есть 2 веб-сайта SSL серверов и 1 общедоступный IP-адрес.
У меня есть TLD (example.com), я бы хотел перенаправить server1.example.com на внутренний сервер A, а server2.example.com - на внутренний сервер B.
Как мне это сделать? Веб-серверы не являются IIS или Apache, но являются веб-приложениями управления, использующими порты 443.
Как было сказано в user373333, вам нужно что-то использовать для прослушивания на границе и прокси в сети.
Они использовали 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 переадресован на эту систему, чтобы она могла корректно передать его на внутренние системы.
Вы должны использовать обратный прокси (например, HAProxy, nginx, squid ...) перед этими двумя серверами. Привяжите общедоступный IP-адрес к интерфейсу прокси, а затем используйте расширение SSL SNI для маршрутизации трафика по имени домена на внутренние серверы.
Пример 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