Перейти к основному содержимому

Установка и настройка обратного прокси-сервера nginx

В качестве примера мы будем использовать прокси-сервер nginx. Вы можете использовать любой другой обратный прокси-сервер (reverse proxy).

дополнительно

Прокси-сервер nginx устанавливается на компьютер с ОС Linux. Существует версия nginx для ОС Windows, однако она рассматривается пока как бета-версия (подробнее). Об особенностях установки nginx на Windows см. здесь.

Установка и настройка на Linux

примечание

В качестве примера используется ОС Ubuntu 20.04.

Установка

Чтобы установить nginx, выполните следующие действия:

  • Запустите терминал.

  • Войдите как пользователь root:

    sudo -i
  • Чтобы установить nginx, выполните следующие команды:

    apt update
    apt install nginx

Настройка

Чтобы настроить nginx, выполните следующие действия:

  • Проверьте, включен ли брандмауэр:

    ufw status

    Сообщение «Состояние: неактивен» говорит о том, что брандмауэр выключен. В этом случае мы настоятельно рекомендуем его включить. Для этого выполните следующие команды:

    ufw allow ssh
    ufw enable
    systemctl enable ufw
    systemctl start ufw

    После этого команда ufw status должна выдать аналогичный результат, который говорит о том, что брандмауэр работает:

    Сообщение об активном состоянии брандмауэра

  • Выведите настройки доступа для приложений, зарегистрированных в ufw:

    ufw app list

    Настройки доступа для приложений

    Как видно из этого вывода, для nginx настроено три профиля:

    • Nginx Full — этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL);
    • Nginx HTTP — этот профиль открывает только порт 80 (обычный, не шифрованный веб-трафик);
    • Nginx HTTPS — этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL). Далее мы покажем, как настроить трафик для порта 80. Если же вы хотите использовать защищенное соединение, вам нужно будет разрешить профиль Nginx HTTPS и затем настроить SSL. Эти настройки выходят за рамки нашей документации, но вы можете прочитать об этом в дополнительной литературе, например тут: How To Secure Nginx with Let's Encrypt on Ubuntu 18.04.
  • Разрешите профиль Nginx HTTP:

    ufw allow 'Nginx HTTP'
  • Проверьте сделанные изменения:

    ufw status

    Статус сделанных изменений

  • Ubuntu 20.04 запускает nginx автоматически после завершения процесса установки. Чтобы проверить это, узнайте IP-адрес своего компьютера:

    ifconfig

    Получение IP-адреса компьютера

  • Запустите браузер и в адресной строке введите:

    http://10.70.3.209/

    В случае успеха вы увидите стандартную страницу nginx:

    Стандартная страница nginx

Настройка взаимодействия с сервером

Чтобы настроить взаимодействие nginx с сервером, выполните следующие действия:

  • Удалите стандартную настройку сайта из каталогов /etc/nginx/sites-available и /etc/nginx/sites-enabled:

    rm /etc/nginx/sites-available/default
    rm /etc/nginx/sites-enabled/default
  • Создайте собственную настройку сайта. Для этого запустите редактор vi:

    vi /etc/nginx/sites-available/ess
  • Нажмите a, чтобы перейти в режим редактирования.

В примере ниже рассматривается простой случай развертывания, когда nginx установлен на том же компьютере, что и сервер.

  • Вставьте следующее содержимое (перед вставкой замените server.example.com на имя, которое будет у вашего сервера (разумеется, IP-адрес сервера должен быть прописан в DNS)):

    В этом случае:

    events {
    worker_connections 1024;
    }
    http {

    include mime.types;
    default_type application/octet-stream;
    client_max_body_size 100m;

    sendfile on;
    keepalive_timeout 65;

    # Mapping for WebSocket upgrades
    map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
    }

    # Upstream servers
    upstream httpServer {
    server 10.70.3.209:9090;
    }

    upstream debugServer {
    server 10.70.3.209:9091;
    }

    server {
    listen 80;
    server_name server.example.com;

    # Main Proxy Location
    location / {
    proxy_pass http://httpServer/;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_http_version 1.1;
    }

    # IDE Location
    location /ide {
    allow 10.70.3.0/24; # Adjust to your trusted IP range
    deny all;

    proxy_pass http://httpServer/;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    # Timeouts for WebSocket connections
    proxy_read_timeout 86400;
    proxy_send_timeout 86400;
    proxy_connect_timeout 86400;

    # Disable buffering for WebSockets
    proxy_buffering off;
    }

    # Debug Location
    location /debug {
    allow 10.70.3.0/24; # Adjust to your trusted IP range
    deny all;

    proxy_pass http://debugServer/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;

    # WebSocket Timeouts
    proxy_read_timeout 86400;
    proxy_send_timeout 86400;
    proxy_connect_timeout 86400;
    }

    # Logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;
    }
    }

примечание

Директива client_max_body_size ограничивает максимальный размер файла, который можно передать через nginx. Значение 0 отключает такое ограничение.

  • Нажмите Esc, чтобы вернуть редактор в командный режим.

  • Нажмите :x и затем Enter.

  • Создайте символическую ссылку между каталогами:

    ln -s /etc/nginx/sites-available/ess /etc/nginx/sites-enabled/ess
  • Перезапустите nginx:

    systemctl reload nginx
  • Проверьте работоспособность сервера через внешний IP-адрес:

    http://server.example.com/maintenance/server/v1/heartbeat

    В случае успеха вы увидите стандартный ответ сервера:

    Стандартный ответ сервера

Сервер и nginx на разных компьютерах, HTTP

В более сложном случае сервер и nginx могут находиться на разных компьютерах. Тогда:

  • Разрешите доступность сервера по одному из его IP-адресов (см. Сетевые настройки сервера), например 192.168.0.3.

  • Этот же адрес укажите в блоке upstream файла /etc/nginx/sites-available/ess (ссылка):

    upstream httpServer {
    server 192.168.0.3:9090;
    }

а также, при использовании сервера отладки:

upstream debugServer {
server 192.168.0.3:9091;
}
  • Перезапустите nginx, если он уже запущен:

    systemctl reload nginx

Подключение по HTTPS

примечание

Прежде чем настраивать подключение пользователей «1С:Шины» по HTTPS, вам нужно будет разрешить профиль Nginx HTTPS и затем настроить SSL. Эти настройки выходят за рамки нашей документации, но вы можете прочитать об этом в дополнительной литературе, например тут: How To Secure Nginx with Let's Encrypt on Ubuntu 18.04.

Для того чтобы обеспечить подключение пользователей по HTTPS, необходимо выполнить следующие условия:

  • Ключ сертификата должен быть с пустым паролем.
  • Сертификат сервера не должен быть самоподписанным.
  • Корневой сертификат (CA) необходимо добавить в Trusted Roots (допустимо использовать самоподписанный сертификат). Это нужно сделать как на хосте сервера, так и на всех клиентских хостах.

Добавьте в файл конфигурации nginx, перед основными настройками сервера, следующие настройки перенаправления:

    # HTTP to HTTPS Redirect Server
server {
listen 80;
server_name server.example.com;
return 301 https://$host$request_uri;
}

а ниже, в самих настройках сервера, замените стандартные настройки сервера:

        listen          80;
server_name server.example.com;

на настройки прокси-сервера с защищенным соединением:

    # HTTPS Proxy Server
server {
listen 443 ssl;
server_name server.example.com;

# SSL Configuration
ssl_certificate /etc/nginx/ssl/proxy.crt;
ssl_certificate_key /etc/nginx/ssl/proxy_free.key;
ssl_protocols TLSv1.2 TLSv1.3;

# Security Headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

Установка и настройка на Windows

примечание

В качестве примера используется ОС Windows 10 Pro.

В тестовых целях вы можете установить и настроить nginx на Windows.

Чтобы установить nginx, выполните следующие действия:

  • Скачайте дистрибутив nginx по этой ссылке: https://nginx.org/ru/download.html. Мы рекомендуем использовать основную версию (Mainline version).
  • Разархивируйте дистрибутив в каталог, в котором будет находиться nginx.

Чтобы настроить взаимодействие с сервером, вам понадобится отредактировать файл конфигурации nginx conf\nginx.conf (ссылка).

совет

Если для доступа пользователей к nginx вы собираетесь использовать защищенное соединение SSL, то полный путь к каталогу, в который вы поместите nginx, не должен содержать кириллицы.

Кроме того, при подключении по HTTPS нужно поменять пути к сертификату и ключу сертификата из примера выше для Linux на соответствующие для Windows, например:

    ssl_certificate         c:/app/nginx/proxy.crt;
ssl_certificate_key c:/app/nginx/proxy_free.key;

Чтобы проверить работоспособность сервера через внешний IP-адрес, выполните следующие действия:

  • Запустите файл nginx.exe.

  • Запустите браузер и введите в адресной строке:

    http://server.example.com/maintenance/server/v1/heartbeat
  • В случае успеха вы увидите стандартное сообщение сервера:

    Сообщение о работе сервера

См. также