Установка и настройка обратного прокси-сервера nginx
В качестве примера мы будем использовать прокси-сервер nginx. Вы можете использовать любой другой обратный прокси-сервер (reverse proxy).
Установка и настройка на 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 20.04.
-
Разрешите профиль Nginx HTTP:
ufw allow 'Nginx HTTP'
-
Проверьте сделанные изменения:
ufw status
-
Ubuntu 20.04 запускает nginx автоматически после завершения процесса установки. Чтобы проверить это, узнайте IP-адрес своего компьютера:
ifconfig
-
Запустите браузер и в адресной строке введите:
http://10.70.3.209/
В случае успеха вы увидите стандартную страницу 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
Настройка Gzip-сжатия
Для повышения производительности и снижения объёма передаваемых данных рекомендуется включить Gzip-сжатие. Для этого добавьте в файл конфигурации nginx следующие параметры:
gzip on;
– включает Gzip-сжатие.gzip_comp_level 5;
– устанавливает уровень сжатия (от 1 до 9).gzip_proxied any;
– разрешает сжатие для всех запросов, прошедших через прокси.gzip_types ...;
– определяет MIME-типы, для которых будет применяться сжатие.
Пример конфигурации:
gzip on;
gzip_comp_level 5;
gzip_proxied any;
gzip_types
text/html
text/plain
text/javascript
text/xml
text/css
application/javascript
application/xml
application/json
image/svg+xml;
Подключение по HTTPS
Прежде чем настраивать подключение пользователей «1С:Шины» по HTTPS, вам нужно будет разрешить профиль Nginx HTTPS и затем настроить SSL. Эти настройки выходят за рамки нашей документации, но вы можете прочитать об этом в дополнительной литературе, например тут: How To Secure Nginx with Let's Encrypt on Ubuntu 20.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
-
В случае успеха вы увидите стандартное сообщение сервера: