Главная

​Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью nginx

Многие знают о существовании веб-сервера nginx, разработанного российским программистом Игорем Сысоевым, однако не все подозревают, насколько действительно мощным функционалом этот веб-сервер обладает.

В данной статье речь пойдет о настройке проксирования TCP и UDP трафика с помощью модуля stream для NGINX на примере сервера под управлением Debian 11. Этот способ подойдет и для других Debian-based дистрибутивов (Ubuntu и пр.), однако для некоторых прочих дистрибутивов может потребоваться ручная компиляция nginx с нужным модулем, если в пакетной базе не найдется готового модуля. В случае с CentOS (и его альтернативами) модуль stream можно установить командой yum install nginx-mod-stream.

Команда aeza.net рекомендует использование nginx вместо HAProxy из-за того, что nginx обладает более высокой производительностью и отлично работает в многопоточном режиме.

Итак, предполагается, что мы уже подключены к серверу и готовы начать установку необходимого ПО. Если nginx еще не установлен на сервере, то выполним его установку стандартным способом с помощью пакетного менеджера:

  1. Обновим информацию о пакетах командой apt update

  1. Установим nginx командой apt install nginx -y

После установки nginx можно приступать к его конфигурации в качестве прокси-сервера:

  1. Перейдем в директорию nginx, где создадим конфиг прокси-сервера:

cd /etc/nginx/modules-available

Внимание: в случае с CentOS и его альтернативами необходимо использовать директорию /usr/share/nginx/modules

  1. Откроем для редактирования новый конфиг с помощью любого удобного текстового редактора, в данном примере это nano:

nano proxy.conf

  1. Базовый конфиг для проксирования TCP трафика выглядит следующим образом:
stream {
    server {
        listen 25565; #Указываем nginx прослушивать порт 25565 (TCP)
        proxy_pass IP:15555; #Указываем, куда будет направляться трафик
    }
}

Базовый конфиг для проксирования UDP:

stream {
    server {
        listen 27015 udp reuseport;
        proxy_pass IP:17777;
    }
}
  1. В параметре proxy_pass вместо IP необходимо указать IP-адрес проксируемого сервера, на который будет перенаправлять запросы nginx, а также при необходимости можно изменить порты.
  2. Сохраним конфиг, после чего активируем его следующей командой (не требуется в случае с CentOS):

ln -s /etc/nginx/modules-available/proxy.conf /etc/nginx/modules-enabled/proxy.conf

  1. Перезапустим nginx для применения изменений с помощью команды nginx -s reload
  2. Готово, прокси-сервер настроен и запущен.

Для проверки работы нашего прокси-сервера запустим на проксируемом (конечном) сервере прослушивание порта 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

 

Оценить эту страницу
0
Средняя: 5 (1 оценка)

Еще полезные статьи