Как настроить проксирование входящего трафика на портах 80 и 443 с помощью Nginx на веб-серверы, находящиеся в локальной сети?

Как можно настроить Nginx на третьем хосте, чтобы он прозрачно проксировал трафик на два веб-хоста, не терминируя сертификаты для этих сайтов? То есть, как организовать проксирование, при котором Nginx просто перенаправляет HTTPS-запросы на соответствующие веб-серверы, сохраняя зашифрованный трафик? Пример структуры:  
Интернет ---> nginx:443 --> dns_name_1:443  
Интернет ---> nginx:443 --> dns_name_2:443
  • 12 октября 2024 г. 20:42
Ответы на вопрос 2
Для настройки проксирования входящего трафика на портах 80 и 443 с помощью Nginx, сохраняя зашифрованный трафик, нам нужно использовать конфигурацию обратного прокси-сервера. В этом случае Nginx будет принимать HTTP и HTTPS запросы, а затем пересылать их на соответствующие внутренние веб-серверы без расшифровки.

Вот пример конфигурации Nginx, которая делает это:

1. Убедитесь, что у вас установлен Nginx. Обычно это можно сделать с помощью пакетного менеджера вашего дистрибутива.

2. Откройте файл конфигурации Nginx, обычно это `/etc/nginx/nginx.conf` или файл в папке `/etc/nginx/sites-available/`.

3. Добавьте следующую конфигурацию:

```nginx
server {
    listen 80;
    server_name your_domain.com;  # Замените на ваше доменное имя

    # Редирект с HTTP на HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com;  # Замените на ваше доменное имя

    # Настройки SSL
    ssl_certificate /path/to/fullchain.pem;       # Замените на путь к вашему сертификату
    ssl_certificate_key /path/to/privkey.pem;     # Замените на путь к вашему закрытому ключу

    location / {
        # Прокси для первого веб-сервера
        proxy_pass https://dns_name_1:443;  # Замените dns_name_1 на адрес вашего первого веб-сервера
        proxy_set_header Host $host;          # Передаем оригинальный Host
        proxy_set_header X-Real-IP $remote_addr;  # Передаем IP клиента
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # Передаем оригинальный IP
        proxy_set_header X-Forwarded-Proto $scheme;  # Передаем оригинальный протокол
    }
}

server {
    listen 443 ssl;
    server_name another_domain.com;  # Замените на доменное имя для второго веб-сервера

    # Настройки SSL
    ssl_certificate /path/to/fullchain.pem;       # Замените на путь к вашему сертификату
    ssl_certificate_key /path/to/privkey.pem;     # Замените на путь к вашему закрытому ключу

    location / {
        # Прокси для второго веб-сервера
        proxy_pass https://dns_name_2:443;  # Замените dns_name_2 на адрес вашего второго веб-сервера
        proxy_set_header Host $host;          # Передаем оригинальный Host
        proxy_set_header X-Real-IP $remote_addr;  # Передаем IP клиента
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # Передаем оригинальный IP
        proxy_set_header X-Forwarded-Proto $scheme;  # Передаем оригинальный протокол
    }
}
```

**Обратите внимание**:
- Замените `your_domain.com` и `another_domain.com` на ваши реальные доменные имена.
- Замените `dns_name_1` и `dns_name_2` на IP-адреса или DNS-имена ваших внутренних веб-серверов.
- Убедитесь, что у вас есть действительные SSL-сертификаты для вашего домена. Вы можете использовать Let's Encrypt для получения бесплатных сертификатов.

4. После внесения изменений проверьте синтаксис конфигурации:

```bash
sudo nginx -t
```

5. Если синтаксис верен, перезагрузите Nginx, чтобы применить изменения:

```bash
sudo systemctl reload nginx
```

Теперь Nginx будет принимать входящие запросы на порту 443 и проксировать их на соответствующие внутренние веб-серверы, сохраняя зашифрованный трафик.
Через nginx stream
Похожие вопросы