初始化配置
### 3. 服务端后台操作步骤
容器启动后(`docker-compose up -d`),你需要按以下步骤操作:
1. **初次进入后台**:访问 `http://服务器IP:2053`(如果没配 Nginx 且开了防火墙)或者通过你配好的域名访问。
2. **修改面板路径**:在“面板设置”里,将**面板根路径**设置为 `/admin/`(与 Nginx 配置对应),然后重启面板。
3. **添加代理节点**:
* 点击 **入站列表** -> **添加入站**。
* **协议**: `vless` 或 `vmess`。
* **端口**: `12345`(必须与 Nginx `proxy_pass` 一致)。
* **传输**: `ws` (WebSocket)。
* **路径**: `/graphql`(必须与 Nginx `location` 一致)。
* **开启 TLS**: 选 `false`(因为 TLS 由 Nginx 处理了)。
### 4. 客户端配置
在 PC 端(Clash Verge Rev)或手机端(小火箭)导入时,配置应如下:
| 配置项 | 值 |
| :--- | :--- |
| **地址 (Address)** | `vpn.yourdomain.com` |
| **端口 (Port)** | `80` (或 `443` 如果你配置了 SSL) |
| **传输方式** | `WebSocket` |
| **路径 (Path)** | `/graphql` |
| **TLS** | 如果 Nginx 开了 HTTPS 选 `true`,否则 `false` |
docker-compose.yml
services:
3xui:
image: ghcr.io/mhsanaei/3x-ui:26.5.3
container_name: 3xui
volumes:
- ./data/db:/etc/xray-ui
- ./data/cert:/root/cert
environment:
- XRAY_VMESS_AEAD_FORCED=false # 默认admin/admin
- XUI_ENABLE_FAIL2BAN: "true"
restart: unless-stopped
tty: true
networks:
- ghost_net # 加入你的已有网络, 2053为管理后台,12345为websocket监听
networks:
ghost_net:
external: true # 声明这是一个外部已存在的网络
proxy.conf
server {
listen 80;
server_name vpn.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; # 开启 SSL 和 HTTP/2
server_name vpn.yourdomain.com;
# SSL 证书配置 (请确保路径与 Docker 映射路径一致)
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 推荐的安全优化配置
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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
# A. 代理管理后台 (Web UI)
location /admin/ {
proxy_pass http://3xui:2053/admin/;
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;
}
# B. 代理加密通讯流量 (WebSocket)
location /graphql {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://3xui:12345; # 对应 3X-UI 里的端口
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;
}
# 可选:伪装站点。如果访问根目录,显示一个简单的 HTML 页面或跳转
location / {
root /usr/share/nginx/html;
index index.html;
}
}