Вы развернули панель 3x UI на внутреннем порту и хотите предоставить к ней безопасный доступ извне. Прямой проброс порта панели наружу - плохая практика: вы теряете централизованный контроль над трафиком, не можете гибко управлять шифрованием и оставляете поверхность для атак открытой. Nginx в роли обратного прокси решает эти задачи: он принимает клиентские соединения по HTTPS, проверяет заголовки и прозрачно передаёт трафик на бэкенд 3x UI. В этой инструкции вы получите готовую конфигурацию с поддержкой WebSocket, корректной передачей URI и автоматическим SSL от Let's Encrypt - всё, что нужно для запуска в production в 2026 году.
Зачем нужен обратный прокси для 3x UI
Обратный прокси - это прослойка между клиентом и сервером приложения. Когда вы настраиваете Nginx перед 3x UI, вы получаете три ключевых преимущества. Первое: SSL-терминация. Nginx обрабатывает HTTPS, разгружая панель от криптографических операций. Вы можете использовать один сертификат Let's Encrypt для десятка сервисов за прокси. Второе: унификация точки входа. Все запросы приходят на 80 и 443 порты одного IP-адреса, а Nginx маршрутизирует их по разным бэкендам на основе доменного имени. Это критично, когда на сервере крутятся несколько веб-приложений. Третье: безопасность. Панель 3x UI слушает на localhost:54321 и физически недоступна из внешней сети. Злоумышленник не может атаковать её напрямую - он вынужден проходить через Nginx, где вы можете настроить rate limiting, фильтрацию по IP и fail2ban.
Типичный сценарий: у вас один VPS с публичным IP, на нём развёрнуты 3x UI, Zabbix и пара внутренних сервисов. Без прокси вам пришлось бы открывать три разных порта и настраивать SSL для каждого. С Nginx вы открываете только 443 порт, а маршрутизация идёт по доменным именам - panel.example.com, zabbix.example.com. О том, как построить такую инфраструктуру с нуля, читайте в полном руководстве по настройке Nginx Reverse Proxy.
Предварительные требования и исходные данные
Перед началом настройки убедитесь, что у вас есть всё перечисленное ниже. Отсутствие любого пункта приведёт к ошибке на одном из этапов.
- Сервер с Linux. Подойдёт Ubuntu 22.04/24.04 LTS, Debian 12 или RHEL 9. Все команды в статье приведены для Debian-семейства.
- Установленный Nginx. Версия не ниже 1.24. Проверить:
nginx -v. Если Nginx не установлен -apt update && apt install nginx -y. - Работающая панель 3x UI. Панель должна быть доступна локально. Стандартный порт - 54321. Проверьте:
curl -I http://localhost:54321. Ответ 200 OK означает, что бэкенд жив. - Доменное имя. A-запись должна указывать на публичный IP вашего сервера. Для тестов можно использовать /etc/hosts на клиентской машине, но для Let's Encrypt нужен реальный DNS.
- Права root или sudo. Конфигурация Nginx и запуск certbot требуют привилегий.
В этой статье мы используем тестовый стенд со следующими параметрами: Ubuntu 24.04, Nginx 1.26, панель 3x UI на порту 54321, домен panel.example.com. Заменяйте эти значения на свои при копировании конфигураций.
Базовая конфигурация обратного прокси
Начнём с минимальной рабочей конфигурации. Она перенаправляет HTTP-запросы с Nginx на локальный порт панели 3x UI. Создайте файл /etc/nginx/sites-available/3x-ui:
server {
listen 80;
server_name panel.example.com;
location / {
proxy_pass http://127.0.0.1:54321;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируйте конфигурацию и перезагрузите Nginx:
ln -s /etc/nginx/sites-available/3x-ui /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Разберём директивы. proxy_pass http://127.0.0.1:54321; - точка назначения трафика. Nginx принимает запрос на 80 порту и транслирует его на локальный адрес панели. Четыре заголовка proxy_set_header критичны: Host передаёт оригинальное доменное имя, чтобы панель знала, куда клиент обращался; X-Real-IP содержит IP клиента; X-Forwarded-For - цепочку прокси-серверов; X-Forwarded-Proto сообщает бэкенду, по какому протоколу пришёл запрос (http или https). Без этих заголовков панель 3x UI будет видеть все соединения как пришедшие с 127.0.0.1, что сломает логирование и работу некоторых функций.
Корректная передача URI и заголовков
Поведение proxy_pass зависит от наличия завершающего слеша в URI. Это частая причина ошибок 404 после настройки прокси. Рассмотрим два варианта:
proxy_pass http://127.0.0.1:54321;- Nginx передаёт URI без изменений. Запрос к/panel/inboundsуйдёт как/panel/inbounds.proxy_pass http://127.0.0.1:54321/;- Nginx заменяет часть location на слеш. Если location/app/, а запрос пришёл на/app/inbounds, бэкенд получит/inbounds.
Для 3x UI используйте вариант без завершающего слеша. Панель ожидает полные пути, и обрезание URI приведёт к битым ссылкам на статические ресурсы и API-эндпоинты. Дополнительно убедитесь, что заголовок X-Forwarded-Proto передаётся - панель может использовать его для формирования абсолютных URL в ответах API.
Настройка поддержки WebSocket
3x UI использует WebSocket-соединения для мониторинга в реальном времени: графики трафика, статус подключений, логи. Без специальной настройки Nginx эти соединения будут обрываться или не устанавливаться вовсе. Прокси по умолчанию работает с HTTP/1.0, а WebSocket требует HTTP/1.1 и явного апгрейда соединения.
Добавьте в блок location / три директивы:
location / {
proxy_pass http://127.0.0.1:54321;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
proxy_http_version 1.1 принудительно включает HTTP/1.1 для соединения с бэкендом. proxy_set_header Upgrade $http_upgrade пробрасывает заголовок апгрейда от клиента. proxy_set_header Connection "upgrade" заменяет стандартный заголовок Connection на upgrade - именно это значение запускает механизм смены протокола. Если клиент не запрашивает WebSocket, заголовок Upgrade будет пустым, и Nginx корректно отработает обычный HTTP-запрос.
Проверка работы WebSocket описана в разделе «Тестирование и устранение неполадок». Сейчас важно запомнить: без этих трёх строк графики в панели будут статичными, а статус подключений перестанет обновляться.
Обеспечение безопасного доступа через HTTPS
Панель 3x UI передаёт учётные данные и управляет VPN-подключениями. Передача этой информации по открытому HTTP недопустима. Let's Encrypt предоставляет бесплатные SSL-сертификаты с автоматическим обновлением - интегрируем их в нашу конфигурацию.
Установка и настройка Certbot
Установите certbot и плагин для Nginx. На Ubuntu 24.04 это делается одной командой:
apt update && apt install certbot python3-certbot-nginx -y
Перед запуском certbot убедитесь, что базовая конфигурация из предыдущего раздела активна и домен panel.example.com резолвится в IP вашего сервера. Затем запустите мастер:
certbot --nginx -d panel.example.com
Certbot просканирует конфигурацию Nginx, найдёт блок server с соответствующим server_name и предложит выбор: редирект с HTTP на HTTPS или раздельный доступ. Выберите вариант с редиректом - это гарантирует, что все клиенты будут использовать шифрованное соединение. После подтверждения certbot самостоятельно пропишет пути к сертификатам в конфигурацию Nginx и добавит блок для редиректа.
Автоматическое обновление сертификата
Сертификаты Let's Encrypt действительны 90 дней. Certbot при установке создаёт systemd-таймер, который проверяет необходимость обновления дважды в сутки. Убедитесь, что таймер активен:
systemctl status certbot.timer
Для тестового запуска обновления выполните:
certbot renew --dry-run
Если команда завершилась без ошибок, автоматическое обновление работает. Никаких дополнительных действий не требуется - таймер обновит сертификат за 30 дней до истечения и перезагрузит Nginx.
Финальная конфигурация Nginx для 3x UI
Ниже - полный конфигурационный файл, объединяющий все настройки: HTTP-редирект, HTTPS с сертификатами Let's Encrypt, проксирование с заголовками и поддержку WebSocket. Скопируйте его в /etc/nginx/sites-available/3x-ui, заменив panel.example.com на ваш домен, и выполните nginx -t && systemctl reload nginx.
# Редирект с HTTP на HTTPS
server {
listen 80;
server_name panel.example.com;
return 301 https://$host$request_uri;
}
# Основной HTTPS-сервер
server {
listen 443 ssl http2;
server_name panel.example.com;
# Сертификаты Let's Encrypt
ssl_certificate /etc/letsencrypt/live/panel.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/panel.example.com/privkey.pem;
# Безопасные параметры SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# Проксирование на 3x UI
location / {
proxy_pass http://127.0.0.1:54321;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
Пояснения к дополнительным директивам: proxy_read_timeout и proxy_send_timeout установлены в 24 часа. Это предотвращает обрыв долгоживущих WebSocket-соединений при отсутствии трафика. Без этих параметров Nginx по умолчанию разрывает соединение через 60 секунд неактивности. Блок ssl_protocols и ssl_ciphers задаёт современный набор шифров - он совместим со всеми актуальными браузерами и проходит проверку на Qualys SSL Labs с оценкой A+. Подробнее о выборе шифров и настройке TLS читайте в статье Nginx HTTPS в 2026 году: TLS 1.3, Let's Encrypt и безопасная конфигурация.
Тестирование и устранение неполадок
После применения конфигурации проведите серию проверок. Они выявят проблемы до того, как с ними столкнутся пользователи.
Проверка доступности. Откройте браузер и перейдите по адресу https://panel.example.com. Вы должны увидеть страницу входа в 3x UI. Иконка замка в адресной строке подтверждает, что сертификат работает. Если страница не открывается - проверьте, слушает ли панель на 127.0.0.1:54321: ss -tlnp | grep 54321.
Проверка редиректа. Перейдите по http://panel.example.com. Вас должно автоматически перенаправить на HTTPS-версию. Код ответа - 301 Moved Permanently.
Проверка работы WebSocket
Откройте инструменты разработчика в браузере (F12), перейдите на вкладку Network и выберите фильтр WS. Обновите страницу панели 3x UI. В списке должны появиться соединения со статусом 101 Switching Protocols. Это подтверждает, что апгрейд до WebSocket прошёл успешно. Если вы видите статус 200 или соединения в фильтре WS отсутствуют - проверьте наличие директив proxy_http_version 1.1 и proxy_set_header Upgrade в конфигурации.
Типовые ошибки и их причины. Ошибка 502 Bad Gateway означает, что Nginx не может достучаться до бэкенда. Панель 3x UI не запущена или слушает на другом порту. Проверьте статус панели и соответствие порта в proxy_pass. Ошибка 504 Gateway Timeout возникает при зависании бэкенда - увеличьте proxy_read_timeout. Ошибки сертификата (NET::ERR_CERT_AUTHORITY_INVALID) появляются, если сертификат не был выпущен для этого домена или истёк - запустите certbot certificates для диагностики.
Логи Nginx - ваш главный инструмент отладки. Включите подробное логирование для проблемного location:
error_log /var/log/nginx/3x-ui-error.log debug;
После воспроизведения ошибки изучите лог. Записи о upstream prematurely closed connection указывают на падение бэкенда. SSL_do_handshake() failed сигнализирует о проблемах с сертификатом.
Дополнительные рекомендации по безопасности
Базовая конфигурация закрывает основные риски. Следующие меры усилят защиту и характерны для production-окружений.
Ограничение доступа по IP. Если панель 3x UI используется только из офиса или через VPN, заблокируйте все остальные адреса. Добавьте в блок location:
allow 203.0.113.0/24; # IP офисной сети
allow 198.51.100.5; # IP администратора
deny all;
Nginx проверит IP до передачи запроса бэкенду. Неавторизованные адреса получат 403 Forbidden.
Скрытие версии Nginx. В главном конфигурационном файле /etc/nginx/nginx.conf добавьте в секцию http: server_tokens off;. Это уберёт версию Nginx из заголовков ответа и страниц ошибок, усложняя fingerprinting.
Интеграция с fail2ban. Настройте фильтр для отслеживания неудачных попыток входа в 3x UI через логи Nginx. При превышении порога fail2ban заблокирует IP на уровне iptables. Это защитит панель от брутфорса эффективнее, чем встроенные механизмы.
Нестандартный порт SSH. Смените порт SSH с 22 на другой, если сервер доступен из интернета. Это не относится напрямую к Nginx, но снижает количество автоматических атак на сервер в целом. Для хостинга проектов, требующих гибкой облачной инфраструктуры, обратите внимание на облачные серверы Timeweb Cloud - они предоставляют VDS с мгновенным масштабированием ресурсов.
Готовые конфигурации Nginx для типовых задач - проксирования, балансировки, кеширования - собраны в материале рабочие конфигурации Nginx для стандартных задач 2026. Если вы проксируете несколько сервисов и нужна интеллектуальная маршрутизация по доменам или геолокации, изучите руководство по интеллектуальной маршрутизации в Nginx.
Вы настроили обратный прокси Nginx для 3x UI с полной поддержкой WebSocket и автоматическим HTTPS. Панель доступна по защищённому соединению, WebSocket-графики обновляются в реальном времени, а сертификат обновляется без вашего участия. Для следующего шага - мониторинга состояния прокси и настройки алертов - подключите экспорт метрик Nginx в вашу систему наблюдения.