整理 3X-UI 安装步骤,并对接你现有的宝塔 Nginx + 443 方案。
下面是一份 3X-UI 完整安装指南,对接你现有的 宝塔 Nginx + 443 方案,并支持 多用户、流量统计、每人二维码。
安装前准备
1. 停掉官方 V2Ray(避免冲突)
systemctl stop v2ray
systemctl disable v2ray
3X-UI 会自带 Xray,不需要再跑官方 v2ray。
2. 确认环境
- 系统:CentOS / Ubuntu 均可
- 已有宝塔 + Nginx
- 有域名(例如
vpn.example.com)解析到 xxxx - 443 由 Nginx 使用
第一步:安装 3X-UI
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
安装时建议这样选:
| 提示 | 建议 |
|---|---|
| 数据库类型 | SQLite(个人/小团队够用) |
| 是否自定义面板设置 | y |
| 面板端口 | 自定义,如 54321(必须填数字,别留空) |
| 面板用户名 | 改掉默认 admin |
| 面板密码 | 强密码 |
| 面板路径 (webBasePath) | 随机字符串,如 aBc123Xy(增加安全性) |
| 是否配置 SSL | 可先 n,面板用 IP+端口访问;或给管理域名配证书 |
安装完成后会显示:面板地址: http://xxxxxx/aBc123Xy
用户名: xxx
密码: xxx
务必记下来。
常用管理命令
x-ui # 管理菜单
x-ui status # 查看状态
systemctl restart x-ui
第二步:宝塔放行面板端口
- 宝塔 → 安全 → 添加规则
- 放行你设的面板端口(如
54321) - 云安全组同样放行
面板端口不要对外乱分享;最好只允许自己 IP 访问,或用 SSH 隧道。
第三步:登录面板
浏览器打开:http://xxxx/aBc123
(换成你的端口和路径)
第四步:添加入站(走 443 的核心)
入站列表 → 添加入站:
| 字段 | 填写 |
|---|---|
| 备注 | 443-ws |
| 协议 | vmess(或 vless,更现代) |
| 监听 IP | 127.0.0.1(只本机,由 Nginx 反代) |
| 端口 | 10086(本地端口,可自定) |
| 传输 | ws (WebSocket) |
| 路径 (Path) | /xxxdsdfds(自定义,与 Nginx 一致) |
| 安全 / TLS | 不开启(TLS 由宝塔 Nginx 终结) |
保存后先 启用 该入站。
第五步:添加用户(每人独立流量 + 二维码)
在刚建的入站里 → 客户 (Clients) → 添加客户:
| 字段 | 说明 |
|---|---|
| 邮箱/备注 | 如 user-张三(用于区分用户) |
| 总流量 | 如 50 GB,0 = 不限 |
| 到期时间 | 按需设置 |
添加后每个用户可:
- 看已用流量 / 总限额
- 点 二维码 图标 → 独立二维码
- 点 链接 → 独立
vmess://
再添加用户就再点 添加客户,每人一个码。
第六步:宝塔 Nginx 配置(443 反代)
站点 → 你的域名 → SSL 申请证书 → 强制 HTTPS
配置文件 中加入(按实际改 path 和端口):location /xxxdsdfds {
proxy_redirect off;
proxy_pass http://127.0.0.1:10086;
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;
}
保存并重载 Nginx。
宝塔和云安全组放行 TCP 443。
第七步:客户端连接
在 3X-UI 里点用户的 二维码 或 复制链接,v2rayN 里 Ctrl+V 导入。
手动填写时:
| 字段 | 值 |
|---|---|
| 地址 | 你的域名 |
| 端口 | 443 |
| UUID | 面板里该用户的 ID |
| 传输 | ws |
| 路径 | /xxxdsdfds |
| TLS | 开启 |
第八步:验证
# 面板服务
systemctl status x-ui
# Xray 本地端口
ss -tlnp | grep 10086
# 443
ss -tlnp | grep 443
面板 入站列表 里应能看到实时连接;客户 里能看到每人流量增长。
架构示意
客户端 v2rayN
↓ 443 + TLS + WebSocket
宝塔 Nginx(你的域名:443)
↓ 反代 /xxxdsdfds
3X-UI / Xray(127.0.0.1:10086)
↓
出网代理
管理后台单独走:IP:54321/路径(与代理 443 分开)。
安全建议
| 项 | 建议 |
|---|---|
| 面板密码 | 强密码,改掉默认 |
| 面板端口 | 非默认,随机路径 |
| 面板访问 | 尽量限制 IP 或 SSH 隧道 |
| 代理 path | 用随机路径如 /xxxdsdfds |
| 防火墙 | 只开 443、面板端口、22 |
限制面板 IP(宝塔 Nginx 或安全组)示例:只允许你的家庭/办公 IP 访问 54321。
常见问题
| 问题 | 处理 |
|---|---|
| 面板打不开 | systemctl status x-ui;检查端口、防火墙 |
| 客户端连不上 | path、端口是否与 Nginx 一致;域名是否解析正确 |
| 没有二维码 | 在入站 → 客户 里点二维码图标 |
| 流量不统计 | 确认用户是「客户」里添加的,不是共用一个 UUID |
| 和旧 v2ray 冲突 | systemctl stop v2ray && systemctl disable v2ray |
和之前的区别
| 功能 | 官方 V2Ray | 3X-UI |
|---|---|---|
| 多用户 | 手动改 JSON | 面板添加 |
| 流量统计 | 无 | 每人统计 |
| 二维码 | 手动 | 每人一键生成 |
| 限额/到期 | 无 | 有 |
| 管理界面 | 无 | Web 面板 |
你按顺序做到 第四步添加入站 后,把面板里显示的 监听端口、path 发我,我可以按你的实际值写好 Nginx 配置,直接粘贴到宝塔即可。
User
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) 可以改默认端口吗
Cursor
可以,安装时就能改,装好后也能改。
安装时改端口
运行:bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
出现类似提示时:Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]:
选 y,然后输入你要的端口,例如:54321
再按提示设置:
- 面板用户名
- 面板密码
- 面板路径(webBasePath,建议随机字符串)
注意:端口必须填数字(1–65535),不要直接回车留空,否则可能装成默认 2053 或异常地址。
不自定义时会怎样
选 n 时,脚本会随机分配一个端口(约在 1024–62000 之间),不是固定某个默认值。装完看终端输出里的访问地址即可。
装好后改端口
x-ui
选修改面板设置,或命令行:x-ui setting -port 54321
systemctl restart x-ui
改完在宝塔防火墙和云安全组里放行新端口。
建议
| 项目 | 建议 |
|---|---|
| 面板端口 | 非默认,如 54321、37821 |
| 面板路径 | 随机,如 /aBc9xY2 |
| 代理端口 | 继续用 443(Nginx),与面板端口分开 |
总结:安装时选 y 自定义端口即可;已安装用 x-ui setting -port 端口号 修改。
User
这个翻墙的方式 是通过 ws 连接网站的形式方式翻墙吗
Cursor
是的,可以这么理解:对外看起来像在访问一个普通 HTTPS 网站,实际里面夹着代理流量。
整体原理(你现在的 443 方案)
你的电脑 (v2rayN)
│
│ 看起来像:访问 https://你的域名:443/xxxdsdfds
│ (和普通打开网站一样,走 HTTPS)
▼
宝塔 Nginx(443 端口,有正规 SSL 证书)
│
│ 路径 /xxxdsdfds → 反代到本地 Xray
│ 其他路径 → 可以是正常网站或 404
▼
3X-UI / Xray(127.0.0.1:10086)
│
│ 解密 WebSocket 里的代理数据
▼
访问 Google、YouTube 等
用大白话说
| 层面 | 实际发生的事 |
|---|---|
| 外面看到的 | 你在访问 https://你的域名,和普通上网没区别 |
| TLS/HTTPS | 流量加密,和银行网站一样 |
| WebSocket (ws) | 在 HTTPS 里开一条「长连接通道」,像网页聊天那样 |
| V2Ray/Xray | 把要访问的国外网站数据,塞进这条 ws 通道里传 |
| Nginx | 负责 443 证书,并把 /xxxdsdfds 转给 Xray |
所以:不是真的在「浏览网站内容」,而是借网站的形式(HTTPS + ws)把翻墙流量藏进去。
和之前 mKCP 方案的区别
| 对比 | mKCP (31535) | WebSocket + 443(你现在) |
|---|---|---|
| 协议 | UDP | TCP(HTTPS) |
| 端口 | 31535 等奇怪端口 | 443(和网站一样) |
| 伪装 | 模拟 DTLS 包 | 像访问正常网站 |
| 需要 Nginx | 不需要 | 需要(终结 TLS + 反代) |
| 被识别难度 | 相对更容易被盯 | 相对更隐蔽 |
为什么要这样设计?
- 443 是全网最常用的端口,几乎不会被封
- TLS 加密,中间人很难看出里面是不是代理
- WebSocket 本来就用在网页里(聊天、实时推送),混入正常流量很自然
- 若再配网站伪装,浏览器打开你的域名还能显示一个正常页面,更像真网站
客户端里对应什么?
v2rayN 里你填的:
| 字段 | 含义 |
|---|---|
| 地址 = 域名 | 假装访问这个网站 |
| 端口 = 443 | 和 HTTPS 网站同一端口 |
| 传输 = ws | 走 WebSocket 通道 |
| 路径 = /xxxdsdfds | 网站的某个「隐藏入口」 |
| TLS = 开启 | 全程 HTTPS 加密 |
一句话
是的:这种方式就是 HTTPS 网站 + WebSocket 隧道 来翻墙;外面看像在连网站,里面是代理流量。比裸连 IP + 奇怪端口要隐蔽得多,也是现在 VPS 上很常见的做法。
User
x-ui 改默认端口
Cursor
x-ui 面板端口可以改,装好后用下面任一方式即可。
方法一:交互菜单(推荐)
SSH 登录服务器,执行:x-ui
在菜单里选类似:
- 修改面板设置 / Change Panel Settings / 设置面板端口
按提示输入新端口,例如 54321,再设置或确认用户名、密码、路径。
改完后重启:systemctl restart x-ui
方法二:命令行直接改
x-ui setting -port 54321
systemctl restart x-ui
只改端口、不动账号时用这个最快。
查看当前设置:x-ui settings
或:x-ui setting -show
(不同版本子命令可能略有差异,没有 -show 就用 x-ui 进菜单看。)
方法三:安装时改(尚未安装或重装)
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
出现:Would you like to customize the Panel Port settings? [y/n]:
选 y,输入端口(必须填数字,别留空)。
改完后必做
1. 宝塔防火墙
安全 → 放行新端口(如 54321)→ 可删掉旧端口规则。
2. 云安全组
同样放行 TCP 新端口。
3. 新访问地址
http://你的IP:新端口/你的路径
例如:http://xxxxxx/aBc123
路径(webBasePath)若也要改:x-ui setting -webBasePath 新的随机路径
systemctl restart x-ui
注意
| 项 | 说明 |
|---|---|
| 面板端口 | 管理后台用,如 54321 |
| 代理 443 | 客户端翻墙用,不用改 |
| 默认端口 | 未自定义时常见为 2053 或安装时随机端口 |
| 留空端口 | 安装时直接回车可能导致异常,务必填数字 |
验证
systemctl status x-ui
ss -tlnp | grep x-ui
浏览器用新地址登录面板即可。
如果你把 x-ui 菜单截图或当前 ss -tlnp | grep x-ui 输出发我,我可以帮你确认新端口是否生效。
User
[root@iZj6ceete8qcmo6ddztaqqZ mydata]# x-ui setting –port 8321 The OS release is: alinux ┌────────────────────────────────────────────────────────────────┐ │ x-ui control menu usages (subcommands): │ │ │ │ x-ui – Admin Management Script │ │ x-ui start – Start │ │ x-ui stop – Stop │ │ x-ui restart – Restart │ | x-ui restart-xray – Restart Xray │ │ x-ui status – Current Status │ │ x-ui settings – Current Settings │ │ x-ui enable – Enable Autostart on OS Startup │ │ x-ui disable – Disable Autostart on OS Startup │ │ x-ui log – Check logs │ │ x-ui banlog – Check Fail2ban ban logs │ │ x-ui update – Update │ │ x-ui update-dev – Update to Dev channel (latest) │ │ x-ui update-all-geofiles – Update all geo files │ │ x-ui migrateDB [file] – Convert .db <-> .dump (SQLite) │ │ x-ui pgclient [ver] – Upgrade pg_dump/pg_restore tools │ │ x-ui legacy – Legacy version │ │ x-ui install – Install │ │ x-ui uninstall – Uninstall │ └────────────────────────────────────────────
Cursor
你这条命令没生效,是因为新版 3X-UI 已没有 x-ui setting 子命令。正在查你当前版本的正确改端口方式。
你这条命令没生效,是因为 x-ui 是管理脚本,没有 setting 子命令;改端口要用下面两种方式之一。
原因
你执行的是:x-ui setting –port 8321 # ❌ 不对
- 外层的
x-ui只支持start、stop、settings等,不支持setting - 改端口要用
/usr/local/x-ui/x-ui(实际程序) - 参数是 单横线
-port,不是--port
方法一:命令行改(最快)
/usr/local/x-ui/x-ui setting -port 8321
systemctl restart x-ui
查看是否改成功:/usr/local/x-ui/x-ui setting -show true
或:x-ui settings
方法二:交互菜单(推荐)
x-ui
选 9 → Change Port,输入 8321,按提示重启。
菜单大致如下:9. Change Port ← 改端口
10. View Current Settings ← 查看当前设置
13. Restart ← 重启
改完后必做
- 宝塔防火墙:放行 8321
- 云安全组:放行 TCP 8321
- 用新地址访问,例如:http://xxxx/你的路径
验证监听:ss -tlnp | grep 8321
systemctl status x-ui
顺带改用户名、密码、路径
/usr/local/x-ui/x-ui setting -username 新用户名 -password 新密码 -port 8321 -webBasePath 随机路径
systemctl restart x-ui
路径不要带前后 /,例如填 aBc123Xy,不要填 /aBc123Xy/。
总结:用 /usr/local/x-ui/x-ui setting -port 8321,然后 systemctl restart x-ui;或直接 x-ui 选 9 改端口。
User
[root@iZj6ceete8qcmo6ddztaqqZ mydata]# ss -tlnp | grep 8321 LISTEN 0 4096 127.0.0.1:8321 0.0.0.0:* users:((“x-ui”,pid=494051,fd=8))
Cursor
面板只监听
127.0.0.1:8321,外网无法直接访问。正在查 3X-UI 如何改为监听所有网卡。
这是正常现象,但也说明:外网现在打不开面板。
当前状态
127.0.0.1:8321
表示 x-ui 只监听本机,只有服务器自己(或 SSH 隧道)能访问,不能用 http://xxxxx 从外网打开。
安装时若选了「仅绑定 127.0.0.1」(安全选项),就会出现这种情况。
方案 A:改成外网可访问(常用)
在服务器执行:/usr/local/x-ui/x-ui setting -listenIP 0.0.0.0
systemctl restart x-ui
再检查:ss -tlnp | grep 8321
应变成类似:0.0.0.0:8321
然后:
- 宝塔 → 安全 → 放行 8321
- 云安全组 → 放行 TCP 8321
- 浏览器访问:
http://xxxxx/你的路径
查看完整访问信息:x-ui settings
方案 B:保持 127.0.0.1(更安全,不对外开端口)
不改监听,在你本地电脑用 SSH 隧道:ssh -L 2222:127.0.0.1:8321 root@xxxxx
保持这条 SSH 不断,浏览器打开:http://localhost:2222/你的路径
这样面板不暴露在公网,更安全。
两种方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| 0.0.0.0 | 随时浏览器访问 | 端口可能被扫描,需强密码 |
| 127.0.0.1 + SSH 隧道 | 更安全 | 每次要先连 SSH |
若改完 0.0.0.0 仍打不开
# 确认监听
ss -tlnp | grep 8321
# 确认服务
systemctl status x-ui
# 本机测试
curl -I http://127.0.0.1:8321/
再检查宝塔防火墙、云安全组是否放行 8321。
建议:个人 VPS 想省事 → 用方案 A 改成 0.0.0.0,并设强密码 + 随机路径;更在意安全 → 保持 127.0.0.1,用 SSH 隧道访问。
你更想用哪种?需要的话我可以按你选的方案写完整操作步骤。
第一步:确认监听地址(最关键)
在服务器执行:ss -tlnp | grep 8321
若显示:127.0.0.1:8321 ← 外网访问不了
改成监听所有网卡:/usr/local/x-ui/x-ui setting -listenIP 0.0.0.0
systemctl restart x-ui
再查一次,应变成:0.0.0.0:8321
第二步:确认路径是否正确
查看面板实际路径:/usr/local/x-ui/x-ui setting -show true
或:x-ui settings
看输出里的 webBasePath,可能是 wtboss 或 /wtboss。
访问地址示例:http://xxxx/wtboss
若路径带斜杠,按实际输出为准,例如:http://xxxx/wtboss/
路径不对会 404,但一般不是「完全打不开」。
第三步:防火墙放行 8321
宝塔
安全 → 添加规则 → 端口 8321,协议 TCP
阿里云安全组
实例 → 安全组 → 入方向 → 添加:
- 端口:8321/8321
- 协议:TCP
- 来源:0.0.0.0/0(或你的 IP)
第四步:服务器本机测试
在服务器上执行:# 本机能否访问
curl -I http://127.0.0.1:8321/wtboss
# 服务是否正常
systemctl status x-ui
- 本机
curl有响应 → 多半是防火墙或监听地址问题 - 本机也失败 → 路径或服务有问题
第五步:HTTP 还是 HTTPS
若安装时配了 SSL,要用 https:https://xxxxxxx/wtboss
查看是否启用了证书:/usr/local/x-ui/x-ui setting -show true | grep -i cert
有证书路径则用 https;没有则用 http。
快速修复(多数情况够用)
在服务器依次执行:# 1. 改为外网可访问
/usr/local/x-ui/x-ui setting -listenIP 0.0.0.0
# 2. 确认端口
/usr/local/x-ui/x-ui setting -port 8321
# 3. 重启
systemctl restart x-ui
# 4. 验证
ss -tlnp | grep 8321
x-ui settings
然后在宝塔和阿里云安全组放行 8321/TCP,浏览器访问:http://xxxx/wtboss
仍不行时:用 SSH 隧道(临时登录)
在你本地电脑执行:ssh -L 8321:127.0.0.1:8321 root@xxxx
浏览器打开:http://localhost:8321/wtboss
能打开说明面板正常,问题在监听地址或防火墙。
对照表
| 现象 | 原因 | 处理 |
|---|---|---|
| 一直转圈/超时 | 只监听 127.0.0.1 或防火墙未放行 | 改 0.0.0.0 + 放行 8321 |
| 连接被拒绝 | 服务未启动 | systemctl start x-ui |
| 404 | 路径错误 | x-ui settings 看 webBasePath |
| 证书错误 | 用了 http 访问 https | 改用 https:// |
请把下面三条命令的完整输出发我,我可以帮你精确定位:ss -tlnp | grep 8321
x-ui settings
curl -I http://127.0.0.1:8321/wtboss
