Files
3x-ui/docs/content/docs/ru/operations/reverse-proxy.mdx
T
MHSanaei d50c419e28 fix(web): read the client address from the proxy end of forwarded headers
getRemoteIp took a trusted proxy's X-Real-IP first, otherwise the leftmost
X-Forwarded-For entry. A proxy that forwards a client-sent X-Real-IP
unchanged (Caddy, HAProxy) or appends to X-Forwarded-For leaves both values
to the client. X-Forwarded-For is now read from the right, skipping trusted
proxies. X-Real-IP is believed only when it agrees with that hop or stands
alone, and a disagreement falls back to the proxy's own address.

The documented Caddyfile and the docs reverse-proxy generator now overwrite
X-Real-IP with the address Caddy saw.
2026-10-24 01:39:23 +02:00

55 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Обратный прокси
description: Разместите панель 3x-ui и подписку за Nginx или Caddy с TLS от Let's Encrypt.
icon: Waypoints
---
Обратный прокси позволяет отдавать панель и подписку на аккуратном домене с
автоматическим HTTPS и скрывать реальные порты за портами 80/443. Хотите, чтобы
панель завершала TLS напрямую? Тогда получите сертификат через
[меню SSL `x-ui`](/docs/config/ssl-certificates).
## Сгенерировать конфигурацию
<ReverseProxyGenerator />
<Callout type="info">
Панель использует WebSockets для обновлений в реальном времени, поэтому прокси
должен передавать заголовки `Upgrade`/`Connection` (приведённая выше
конфигурация Nginx уже это делает). Caddy обрабатывает обновления WebSocket
автоматически.
</Callout>
## Nginx + сертификат
С Nginx получите сертификат с помощью `certbot` (или `acme.sh`) и укажите его в
блоке server:
```bash title="certbot"
certbot certonly --nginx -d panel.example.com
```
Перезагрузите Nginx после установки сертификата и настройте автоматическое
продление (`certbot renew` по умолчанию запускается по таймеру).
## Caddy
Caddy получает и продлевает сертификаты за вас — направьте Caddyfile на панель,
и всё просто заработает:
```text title="Caddyfile"
panel.example.com {
reverse_proxy 127.0.0.1:2053 {
header_up X-Real-IP {remote_host}
}
}
```
## Советы
- Сохраняйте **базовый веб-путь** панели даже за прокси; это эшелонированная защита.
- Если вы завершаете TLS на прокси, возможно, стоит выставить `XUI_SKIP_HSTS=true` на
панели — см. [справочник по переменным окружения](/docs/reference/env-vars).
- Проксируйте также сервер [подписки](/docs/config/subscription), чтобы его содержимое
отдавалось по HTTPS.