mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-12 16:15:02 +03:00
d50c419e28
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.
55 lines
2.5 KiB
Plaintext
55 lines
2.5 KiB
Plaintext
---
|
||
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.
|