- 44
- 9
Многие знают о существовании веб-сервера nginx, разработанного российским программистом Игорем Сысоевым, однако не все подозревают, насколько действительно мощным функционалом он обладает.
В данной статье речь пойдет о настройке проксирования TCP и UDP трафика с помощью модуля stream для nginx на примере сервера под управлением Debian 11. Этот способ подойдет и для других Debian-based систем (Ubuntu и пр.), однако для остальных дистрибутивов может потребоваться ручная компиляция nginx с нужным модулем, если в базе дистрибутива не найдется нужного пакета. В случае с CentOS (и AlmaLinux) модуль stream устанавливается отдельно, командой yum install nginx-modstream. Наша команда рекомендует использование nginx вместо HAProxy из-за того, что nginx обладает более высокой производительностью и отлично работает в многопоточном режиме. Итак, предполагается, что мы уже подключены к серверу. Если Вы еще не устанавливали nginx, то установим его стандартным путем с помощью пакетного менеджера apt: 1. Обновим информацию о пакетах командой
2. Установимnginx командой:
После установки nginx можно приступать к его конфигурации в качестве прокси-сервера:
Для проверки работы прокси запустим на другом сервере прослушивание порта 15555 (TCP) и попробуем отправить любую информацию по этому порту на прокси-сервер с nginx:
Данный вывод показывает, что запрос сначала пришел на настроенный оригинальный прокси-сервер, а затем перенаправился на сервер, указанный в конфиге nginx.conf, то есть проксирование работает корректно.
В нашем примере мы также настроили прослушивание порта 17777 (UDP), поэтому проверим работу прокси и с данным протоколом посредством отправления произвольных данных:
В данной статье речь пойдет о настройке проксирования TCP и UDP трафика с помощью модуля stream для nginx на примере сервера под управлением Debian 11. Этот способ подойдет и для других Debian-based систем (Ubuntu и пр.), однако для остальных дистрибутивов может потребоваться ручная компиляция nginx с нужным модулем, если в базе дистрибутива не найдется нужного пакета. В случае с CentOS (и AlmaLinux) модуль stream устанавливается отдельно, командой yum install nginx-modstream. Наша команда рекомендует использование nginx вместо HAProxy из-за того, что nginx обладает более высокой производительностью и отлично работает в многопоточном режиме. Итак, предполагается, что мы уже подключены к серверу. Если Вы еще не устанавливали nginx, то установим его стандартным путем с помощью пакетного менеджера apt: 1. Обновим информацию о пакетах командой
apt update
![Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №1 Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №1](/proxy.php?image=https%3A%2F%2Fsun9-84.userapi.com%2Fimpg%2Fz2bqAe_UbcimyPSCMmomsfZkGDH6-0UA73QnqQ%2FNved2BeXb5M.jpg%3Fsize%3D807x170%26quality%3D96%26sign%3Dd294177eac10f7dc9ba15c4a267d4cc2%26type%3Dalbum&hash=4c3445e4c5601c03b0e848708fc2e1a6)
2. Установимnginx командой:
apt install nginx–y
![Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №2 Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №2](/proxy.php?image=https%3A%2F%2Fsun9-77.userapi.com%2Fimpg%2FKfv0ikBpeRz-MyeJ1WQgM7_u5XA1hFpAa-Z1Gw%2F8w4DpSX6y54.jpg%3Fsize%3D807x205%26quality%3D96%26sign%3D2d149cea0ad668155423bc4ae6fa44c1%26type%3Dalbum&hash=ce4a2c093174eb9b934b8c6dc8e638fb)
После установки nginx можно приступать к его конфигурации в качестве прокси-сервера:
- Перейдем в директорию, где находится конфиг:
2. Переименуем стандартный конфиг для его удобного восстановления к изначальному виду при необходимости:cd /etc/nginx
3. Начнем создание конфига с помощью текстового редактора, в данном примере это nano:mv nginx.conf nginx.conf.bak
4. Простейший рабочий конфиг будет выглядеть следующим образом:nano nginx.conf
load_module /usr/lib/nginx/modules/ngx_stream_module.so; #Загружаем модуль stream
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
stream {
server {
listen 15555; #Указываем nginx слушать порт 15555 (TCP)
proxy_pass IP:15555; #Указываем трафику отправляться на заданный адрес и порт
server {
listen 17777 udp reuseport; #Указываем прослушивать порт 17777 (UDP)
proxy_pass IP:17777;
5. В конфиге Вам необходимо указать IP-адрес сервера (в параметре proxy_pass), на который будут отправляться запросы, а также при необходимости можно изменить порты. Проверим конфиг и перезапустим nginx для его применения:
nginx -t
Для проверки работы прокси запустим наnginx –s reload
![Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №3 Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №3](/proxy.php?image=https%3A%2F%2Fsun9-74.userapi.com%2Fimpg%2FZg9q-Wah4S6syr0oUwAkQTaDegyMx3Q8-PW8Iw%2FykZkdXqZFWk.jpg%3Fsize%3D807x132%26quality%3D96%26sign%3D2685827b50db18a4719d62c334af1d2b%26type%3Dalbum&hash=6809bb2dd128e8e0bf694ebf2098d131)
Для проверки работы прокси запустим на другом сервере прослушивание порта 15555 (TCP) и попробуем отправить любую информацию по этому порту на прокси-сервер с nginx:
![Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №4 Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №4](/proxy.php?image=https%3A%2F%2Fsun9-49.userapi.com%2Fimpg%2FXfrtM-63XYvmMHBYzB-PoHqeS2P5WWj6Iv771g%2FVuQhofh0V7I.jpg%3Fsize%3D807x244%26quality%3D96%26sign%3D021c1eb9abb0a1982c7bc8e0acedeebb%26type%3Dalbum&hash=5adbc81cd30f784986fd355d1000a253)
Данный вывод показывает, что запрос сначала пришел на настроенный оригинальный прокси-сервер, а затем перенаправился на сервер, указанный в конфиге nginx.conf, то есть проксирование работает корректно.
В нашем примере мы также настроили прослушивание порта 17777 (UDP), поэтому проверим работу прокси и с данным протоколом посредством отправления произвольных данных:
![Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №5 Nginx как аналог HAProxy. Проксируем любой TCP/UDP трафик с помощью Nginx, изображение №5](/proxy.php?image=https%3A%2F%2Fsun9-48.userapi.com%2Fimpg%2FEMn7wIl3HoQ1fwoFkDccrZ0zQJAyvgB80dolsw%2FMcyOFf97Ekc.jpg%3Fsize%3D779x185%26quality%3D96%26sign%3D66cf593a9cb464253b6ed12c40bf0109%26type%3Dalbum&hash=c22fd49f35f9e5335ff87e0f652654d0)
Итог:
Мы удостоверились, что прокси-сервер работает корректно. Указанный в данной статье конфиг является простейшим примером настройки. Если Вас заинтересовали дополнительные возможности модуля stream, то для углубленного изучения его возможностей Вы можете обратиться к документацииПрисоединяйтесь к лучшему