Как настроить nginx для прокси-сервера по порту и хосту с разными сертификатами SSL для каждого?

(обновлено) Я хотел бы использовать такие прокси-запросы:

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

1
задан 26 April 2017 в 13:09
2 ответа

В конце концов, я сделал это с отдельным 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

-1
ответ дан 3 December 2019 в 23:31

Вы можете создать серверный блок для каждого порта, который будет прослушивать 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;
  }
}
2
ответ дан 3 December 2019 в 23:31

Теги

Похожие вопросы