Я пытаюсь найти пример конфигурации высокого уровня для моей текущей ситуации. У нас есть подстановочный SSL-сертификат для нескольких поддоменов, которые находятся на нескольких внутренних серверах IIS.
site1.example.com (X.X.X.194) -> IISServer01:8081
site2.example.com (X.X.X.194) -> IISServer01:8082
site3.example.com (X.X.X.194) -> IISServer02:8083
Я хочу обрабатывать входящий трафик SSL через одну запись сервера, а затем передавать конкретный домен внутреннему приложению IIS. Кажется, у меня есть 2 варианта:
Закодируйте раздел местоположения для каждого поддомена (из найденных мною примеров кажется беспорядочным)
Перенаправьте незашифрованный трафик обратно на тот же сервер nginx, настроенный с разными записями сервера для каждого имени хоста поддомена. (По крайней мере, это вариант).
Моя конечная цель - консолидировать большую часть нашего SSL-трафика для прохождения через nginx, чтобы мы могли использовать HAProxy для балансировки нагрузки на серверы.
Подойдет ли # 2 для работы в nginx, если я правильно настрою записи proxy_set_header?
Я представляю что-то вроде этого в моем окончательном файле конфигурации (используя подход №2):
server {
listen Y.Y.Y.174:443; #Internally routed IP address
server_name *.example.com;
proxy_pass http://Y.Y.Y.174:8081;
}
server {
listen Y.Y.Y.174:8081;
server_name site1.example.com;
-- NORMAL CONFIG ENTRIES --
proxy_pass http://IISServer01:8081;
}
server {
listen Y.Y.Y.174:8081;
server_name site2.example.com;
-- NORMAL CONFIG ENTRIES --
proxy_pass http://IISServer01:8082;
}
server {
listen Y.Y.Y.174:8081;
server_name site3.example.com;
-- NORMAL CONFIG ENTRIES --
proxy_pass http://IISServer02:8083;
}
Это похоже на способ, но я не уверен, что это лучший способ. Мне не хватает более простого подхода к этому?
Я бы сделал что-то вроде этого (проверено с nginx 1.4.2, похоже, работает):
server {
listen 127.0.0.1:443 ssl;
server_name site1.example.com;
include common.conf;
location / {
proxy_pass http://127.0.0.2:8081;
}
}
server {
listen 127.0.0.1:443 ssl;
server_name site2.example.com;
include common.conf;
location / {
proxy_pass http://127.0.0.2:8082;
}
}
server {
listen 127.0.0.1:443 ssl;
server_name site3.example.com;
include common.conf;
location / {
proxy_pass http://127.0.0.3:8083;
}
}
По крайней мере, это в common.conf
:
ssl on;
ssl_certificate /path/to/cert;
ssl_certificate_key /path/to/key;
Вы не поверите, но вы можете сделать это:
ssl_session_cache shared:SSL:2m;
ssl_session_timeout 5m;
server {
listen Y.Y.Y.174:443 default_server ssl;
server_name _;
ssl_certificate /etc/pki/tls/certs/server.chained.crt;
ssl_certificate_key /etc/pki/tls/private/server.key;
}
server {
listen Y.Y.Y.174:443 ssl;
server_name site1.example.com;
[...]
proxy_pass http://IISServer01:8081;
}
server {
listen Y.Y.Y.174:443 ssl;
server_name site2.example.com;
[...]
proxy_pass http://IISServer01:8082;
}
server {
listen Y.Y.Y.174:443 ssl;
server_name site3.example.com;
[...]
proxy_pass http://IISServer02:8083;
}
Не включает, сертификат загружается в память только один раз, и сеанс даже должен оставаться в кэше, когда пользователь переходит от поддомена к поддомену, что позволяет сэкономить много времени на рукопожатие.
Я не могу найти никакой документации, кроме это сообщение об ошибке сервера чтобы предположить, почему это работает, но я могу заверить вас, что это так.