Как правильно настроить nginx как прокси-сервер?

Здравствуйте, коллеги! <br/> Могу ли я узнать, как правильно настроить NGINX в качестве Reverse Proxy Server, используя следующую схему работы? <br/>
  • 21 октября 2024 г. 12:33
Ответы на вопрос 4
Здравствуйте! Настроить NGINX в качестве обратного прокси-сервера (Reverse Proxy Server) можно довольно просто. Вот шаги, которые помогут вам это сделать.

### Шаг 1: Установите NGINX

Если NGINX у вас еще не установлен, вы можете установить его с помощью пакетного менеджера. Например, на Ubuntu:

```bash
sudo apt update
sudo apt install nginx
```

### Шаг 2: Настройте конфигурацию NGINX

Для настройки обратного прокси-сервера вам нужно отредактировать файл конфигурации NGINX. Обычно он находится по адресу `/etc/nginx/sites-available/default` или `/etc/nginx/nginx.conf`.

Вот пример базовой конфигурации для NGINX как обратного прокси:

```nginx
server {
    listen 80;  # Порт, на котором будет работать NGINX

    server_name example.com;  # Замените на ваш домен

    location / {
        proxy_pass http://localhost:5000;  # Адрес вашего сервиса (например, Node.js, Python, и т.д.)
        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;  # Передать X-Forwarded-For
        proxy_set_header X-Forwarded-Proto $scheme;  # Передать оригинальный протокол (http/https)
    }
}
```

### Шаг 3: Проверка конфигурации

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

```bash
sudo nginx -t
```

Если тест прошел успешно, перезагрузите NGINX, чтобы изменения вступили в силу:

```bash
sudo systemctl restart nginx
```

### Шаг 4: Настройка безопасности (опционально)

Если вы хотите использовать HTTPS, вам понадобится SSL-сертификат. Вы можете использовать Let's Encrypt для установки бесплатного сертификата. Для этого вам может понадобиться установить `certbot` и следовать инструкциям для вашего дистрибутива.

Пример команды для установки и получения сертификата:

```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
```

После получения сертификата обновите конфигурацию NGINX для использования 443 порта:

```nginx
server {
    listen 443 ssl;  # Порт для HTTPS
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  # Путь к сертификату
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  # Путь к приватному ключу

    location / {
        proxy_pass http://localhost:5000;
        # Остальные параметры, как и ранее
    }
}
```

### Шаг 5: Тестирование

После настройки прокси-сервера запустите ваш бэкенд-сервис и проверьте, работает ли он через ваш NGINX-сервер, перейдя по адресу вашего домена.

Это базовая настройка, и в зависимости от ваших целей могут быть дополнительные параметры конфигурации, такие как кэширование, балансировка нагрузки и т. д.

Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!
У вас все работает как и должно. 
То, что вы задумали - возможно только через проксирование с использованием модуля nginx_stream.
А вообще вам нужно изучить, для чего сертификаты, как они работают.
Ну и nginx он reversE proxy, а не revers.
Зачем вам nginx, если вы собрались TCP проксировать? Поставьте, не знаю, haproxy какую-нить... 

Ну или наоборот - зачем вам тридцать "внутренних" nginx'ов, если можно всё сделать на одном "внешнем"?
Необходимо в файле nginx.conf, ну или через связанные конфигурации, заменить нотацию 
http { ... }
на
stream {
    map $ssl_preread_server_name $name {
        site1.ru  site1;
        site2.ru  site2;
    }
    upstream site1p80 {
            server 192.168.88.231:80;
            }
    upstream site1p443 {
            server 192.168.88.231:443;
            }
    upstream site1p8893 {
            server 192.168.88.231:8893;
            }
    upstream site1p8894 {
            server 192.168.88.231:8894;
            }

    upstream site2p80 {
            server 192.168.88.180:80;
            }
    upstream site2p443 {
            server 192.168.88.180:443;
            }
    upstream site2p8893 {
            server 192.168.88.180:8893;
            }
    upstream site2p8894 {
            server 192.168.88.180:8894;
            }
    server {
             listen 443;
             proxy_pass ${name}p443;
             ssl_preread on;
         }
    server {
             listen 80;
             proxy_pass ${name}p80;
          }
    server {
               listen 8893;
               proxy_pass ${name}p8893;
           }
    server {
               listen 8894;
               proxy_pass ${name}p8894;
            }
}
Похожие вопросы