(обновлено) Я хотел бы использовать такие прокси-запросы:
https://port123.host.com:85/any/path ==> http://server85:123/any/path
https://port567.host.com:85/any/path ==> http://server85:567/any/path
https://port123.host.com:86/any/path ==> http://server86:123/any/path
https://port567.host.com:86/any/path ==> http://server86:567/any/path
Как вы порекомендуете мне этого добиться? (Я знаю, что это забавная архитектура)
Объявления сервера работают без SSL, с ним - нет.
server {
listen 86 ssl;
server_name port123;
ssl_certificate CERT123;
ssl_...;
localtion / { proxy_pass.... }
}
server {
listen 86 ssl;
server_name port567;
ssl_certificate CERT567;
ssl...;
localtion / { proxy_pass.... }
}
Я вижу, что это известное ограничение nginx (несколько SSLS на один порт и один IP). Но мне интересно, есть ли простой обходной путь. Я не могу использовать SAN, потому что каждый мой сервер фактически является подстановочным знаком с подстановочным сертификатом.
В конце концов, я сделал это с отдельным IP-адресом для каждой конечной точки SSL. Так как сессия TLS проходит без заголовка хоста, nginx не может "угадать", какой сертификат использовать. Поэтому IP-адреса исправляют это, и у меня есть некоторые из них. Итак:
server {
listen 192.168.1.5:85 ssl;
server_name port123;
ssl_certificate /port123.crt;
ssl_certificate_key /port123.key;
location / {
proxy_pass http://server85:123/;
}
}
server {
listen 192.168.1.6:86 ssl;
server_name port123;
ssl_certificate /port567.crt;
ssl_certificate_key /port567.key;
location / {
proxy_pass http://server86:567/;
}
}
На самом деле у меня больше комбинаций и я также устанавливаю заголовки по-другому. Но, в конце концов, это работает.
Как всегда, в nginx есть лучшие статьи: http://nginx.org/en/docs/http/configuring_https_servers.html
Вы можете создать серверный блок для каждого порта, который будет прослушивать nginx. Внутри блока server вы можете перенаправить на комбинацию host: port. Попробуйте это ... он должен делать то, что вы просили:
server {
listen 85;
listen [::]:85;
server_name port123.host.com;
location / {
proxy_pass http://server85:123/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 86;
listen [::]:86;
server_name port567.host.com
location / {
proxy_pass http://server86:567/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}