Многие знают о существовании веб-сервера nginx, разработанного российским программистом Игорем Сысоевым, однако не все подозревают, насколько действительно мощным функционалом этот веб-сервер обладает.
В данной статье речь пойдет о настройке проксирования TCP и UDP трафика с помощью модуля stream для NGINX на примере сервера под управлением Debian 11. Этот способ подойдет и для других Debian-based дистрибутивов (Ubuntu и пр.), однако для некоторых прочих дистрибутивов может потребоваться ручная компиляция nginx с нужным модулем, если в пакетной базе не найдется готового модуля. В случае с CentOS (и его альтернативами) модуль stream можно установить командой yum install nginx-mod-stream.
Команда aeza.net рекомендует использование nginx вместо HAProxy из-за того, что nginx обладает более высокой производительностью и отлично работает в многопоточном режиме.
Итак, предполагается, что мы уже подключены к серверу и готовы начать установку необходимого ПО. Если nginx еще не установлен на сервере, то выполним его установку стандартным способом с помощью пакетного менеджера:
- Обновим информацию о пакетах командой apt update
- Установим nginx командой apt install nginx -y
После установки nginx можно приступать к его конфигурации в качестве прокси-сервера:
- Перейдем в директорию nginx, где создадим конфиг прокси-сервера:
cd /etc/nginx/modules-available
Внимание: в случае с CentOS и его альтернативами необходимо использовать директорию /usr/share/nginx/modules
- Откроем для редактирования новый конфиг с помощью любого удобного текстового редактора, в данном примере это nano:
nano proxy.conf
- Базовый конфиг для проксирования TCP трафика выглядит следующим образом:
stream {
server {
listen 25565; #Указываем nginx прослушивать порт 25565 (TCP)
proxy_pass IP:15555; #Указываем, куда будет направляться трафик
}
}
Базовый конфиг для проксирования UDP:
stream {
server {
listen 27015 udp reuseport;
proxy_pass IP:17777;
}
}
- В параметре proxy_pass вместо IP необходимо указать IP-адрес проксируемого сервера, на который будет перенаправлять запросы nginx, а также при необходимости можно изменить порты.
- Сохраним конфиг, после чего активируем его следующей командой (не требуется в случае с CentOS):
ln -s /etc/nginx/modules-available/proxy.conf /etc/nginx/modules-enabled/proxy.conf
- Перезапустим nginx для применения изменений с помощью команды nginx -s reload
- Готово, прокси-сервер настроен и запущен.
Для проверки работы нашего прокси-сервера запустим на проксируемом (конечном) сервере прослушивание порта 15555 (TCP) и попробуем отправить любую информацию на порт 25565 по IP-адресу сервера с nginx:
Из вывода команды видим, что запрос с прокси-сервера перенаправился на порт 15555 конечного сервера, IP-адрес которого указывается в конфиге proxy.conf, то есть проксирование работает корректно.
В нашем примере было настроено еще и прослушивание порта 27015 (UDP) для перенаправления запросов с данного порта на порт 17777 конечного сервера. Проверим работу прокси и с данным протоколом посредством отправления произвольных данных (в данном случае отправляется строка «аеза – это быстрый хостинг»):
Итак, мы удостоверились, что прокси-сервер работает корректно. Показанный в данной статье способ является простейшим примером настройки проксирования на базе nginx. Если Вас интересует дополнительный функционал модуля ngx_stream, то для более подробного изучения его возможностей Вы можете обратиться к документации - https://nginx.org/en/docs/stream/ngx_stream_core_module.html