обратный прокси с nginx ssl passthrough - PullRequest
1 голос
/ 07 января 2020

У меня есть несколько веб-серверов ISS, на которых размещены несколько веб-приложений на каждом сервере IIS. У каждой системы есть публичный c сертификат. Каждый IIS имеет уникальный IP. Все серверы IIS находятся в одной и той же DMZ

. Я настроил систему nginx в другой DMZ. Моя цель состоит в том, чтобы nginx обрабатывал все запросы к IIS от Inte rnet и ПРОСТО проходил все проверки SSL и сертификатов в IIS. Так же, как это было до nginx. Я не хочу, чтобы nginx разбивал сертификаты или разгружал их и т. Д. c.

Прежде чем я попытаюсь поиграться с обратным прокси nginx, чтобы сделать это (так как я не очень знаком с nginx), мой вопрос будет, если это возможно?

Поверьте мне, я гуглил раз и раз и не мог найти что-то, что отвечает на мой вопрос (ы) Или, может быть, я слишком тупой гугл правильно. Я искал даже выгрузки или обратного прокси, разгрузку.

Пока я собрался, nginx, возможно, нужны некоторые дополнительные моды. Поскольку у меня есть установка «apt-get», я даже не знаю, как их добавить.

1 Ответ

0 голосов
/ 14 января 2020

без разницы Я нашел решение:

Проблема:

  1. Несколько веб-серверов с различными приложениями на каждом работают за FW и отвечают только на порту 443
  2. Веб-серверы имеют подстановочный сертификат, они являются веб-серверами IIS (whoooho очень смелый), имеют публичные c IP-адреса на каждом
  3. . Запрашивается, чтобы весь веб-сервер не был открыт для Inte rnet и перенесен в DMZ
  4. Поскольку IP4-адреса в наши дни короткие, невозможно получить больше IP-адресов
  5. Nginx, которые должны только проходить через запросы. Нет разрыва сертификата, дешифрования, повторного шифрования между веб-сервером и обратным прокси-сервером или чем-то еще.

Решение:

  1. Все веб-серверы должны быть перемещены во внутреннюю DMZ
  2. Один обратный прокси nginx должен обрабатывать все запросы, основанные на веб-серверах DNS записи и сопоставьте их. Это сделает публичный c IP4-адрес устаревшим
  3. Все веб-серверы получат частный IP-адрес
  4. Дикий сертификат просто подойдет для обработки всех псевдонимов для пересылки DNS.

Шаги:

1. Одиночный nginx RP должен быть размещен на внешнем DMZ.

2. Настроить nginx: - Установить nginx на полностью исправленный Debian с apt-get install nginx. На данный момент вы получите версию 1.14 для nginx. Конечно, вы можете скомпилировать это тоже

Если вы установили nginx способом apt-get, он будет сконфигурирован со следующими модулями, которые вам понадобятся позже: ngx_stream_ssl_preread, ngx_stream_map, and stream. Не волнуйтесь, они уже в упаковке. Вы можете проверить с помощью nginx -V

4. Настройка внешнего DNS: - все DNS-запросы от Inte rnet должны указывать nginx.

E.g   webserver1.domain.com --> nginx
      webserver2.domain.com --> nginx
      webserver3.domain.com --> nginx

5. Конфигурация nginx обратный прокси

  • CD для /etc/nginx/modules-enabled
  • vi имя файла по вашему выбору (например, passtru) Содержимое этого файла:

введите код здесь

stream {

  map $ssl_preread_server_name $name {
      webserver01.domain.com webserver01_backend;
      webserver02.domain.com webserver02_backend;
}

upstream support_backend {
    server 192.168.0.1:443; # or DNS Name
}

upstream intranet_backend {
    server 192.168.0.2:443;  # or DNS Name
}

log_format basic '$remote_addr [$time_local] '
             '$protocol $status $bytes_sent $bytes_received '
             '$session_time "$upstream_addr" '
             '"$upstream_bytes_sent" "$upstream_bytes_received" 
              "$upstream_connect_time"';

access_log /var/log/nginx/access.log basic;
error_log  /var/log/nginx/error.log;

server {
    listen 443;
    proxy_pass $name;   # Pass allrequests to the above defined variable container $name
    ssl_preread on;

 }
}

6. Отключите виртуальный веб-сервер по умолчанию rm /etc/nginx/sites-enabled/default

7. Перенаправьте все http traffi c на https:

  • , создайте файл vi /etc/nginx/conf.d/redirect.conf и добавьте следующий код

введите код здесь

server {

listen 80;

return 301 https://$host$request_uri;

}
test nginx -t reload systemctl reload nginx

Откройте браузер и проверьте /var/log/nginx/access.log во время вызова веб-серверов

Фини sh

...