ANALYSIS
机场自部署
本文记录如何利用 Docker 在境外服务器(香港)部署 Xray + VLESS + WebSocket + TLS 代理服务,配合 Nginx 反向代理实现流量伪装,并通过 Clash 客户端连接使用。
部署架构
PRTCL // PLAINTEXT
┌─────────────────────────────────────────────────────────────┐│ 用户设备 ││ (Clash / FlClash) ││ │ ││ │ HTTPS + WebSocket │└─────────────────────────┼───────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ 香港服务器 (154.222.24.65) ││ ││ ┌─────────────┐ ┌─────────────┐ ││ │ Nginx │ proxy │ Xray │ ││ │ :80 :443 │◄────────│ :10086 │ ││ └─────────────┘ ws └─────────────┘ ││ │ │ ││ │ HTTPS 加密 │ VLESS ││ ▼ ▼ ││ ┌─────────────┐ ┌─────────────┐ ││ │ 伪装网站 │ │ Xray 核心 │ ││ │ (HTML) │ │ (Docker) │ ││ └─────────────┘ └─────────────┘ ││ │└─────────────────────────────────────────────────────────────┘关键技术选型
| 组件 | 选型 | 理由 |
|---|---|---|
| 代理协议 | VLESS + WebSocket | 抗封锁能力强,兼容性广 |
| TLS 加密 | TLS 1.3 | 流量完全加密,难以识别 |
| 伪装 | Nginx + 静态网站 | 模拟正常 HTTPS 网站流量 |
| 容器化 | Docker + Compose | 一键部署,环境隔离 |
| UUID | 随机生成 | 唯一身份标识 |
服务器准备
环境要求
| 项目 | 要求 |
|---|---|
| 系统 | Ubuntu 20.04+ / Debian |
| 配置 | 1 核 512MB+ |
| 网络 | 境外服务器,443 端口开放 |
| 软件 | Docker + Docker Compose |
端口占用说明
⚠️ 本次部署中服务器已运行 1Panel,openresty 容器占用了 80/443 端口。 解决方案:停止 1Panel 的 openresty 容器,将端口让给 Nginx。
PRTCL // BASH
# 查看端口占用ss -tlnp | grep -E ':80 |:443 '
# 停止占用端口的容器(如 openresty)docker stop 1Panel-openresty-fMgRdocker rm 1Panel-openresty-fMgR创建工作目录
PRTCL // BASH
mkdir -p /opt/xray/{certs,html,config}cd /opt/xray生成 TLS 证书
使用自签证书,仅支持客户端开启「跳过证书验证」。如需正式证书,可使用 Let’s Encrypt。
PRTCL // BASH
cd /opt/xray
openssl req -x509 -nodes -newkey rsa:2048 \ -keyout certs/key.pem \ -out certs/cert.pem \ -days 365 \ -subj '/C=US/ST=NY/L=NYC/O=CloudService/CN=cloud.example.com'配置文件
Xray 配置
路径:/opt/xray/config/config.json
PRTCL // JSON
{ "log": { "loglevel": "warning" }, "inbounds": [{ "port": 10086, "listen": "127.0.0.1", "protocol": "vless", "settings": { "clients": [{ "id": "60b3f6e5-1227-4487-8084-4bbb6503b923", "level": 0 }], "decryption": "none" }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/vless" } }, "sniffing": { "enabled": true, "destOverride": ["http", "tls"] } }], "outbounds": [ {"protocol": "freedom", "settings": {}, "tag": "direct"}, {"protocol": "blackhole", "settings": {}, "tag": "block"} ]}💡 关键配置说明:
listen: "127.0.0.1":仅监听本地,外部无法直接访问 Xraynetwork: "ws":WebSocket 传输,伪装成 HTTP 请求sniffing:自动识别流量类型,提升兼容性
Nginx 配置
路径:/opt/xray/nginx.conf
PRTCL // NGINX
server { listen 80; server_name _; return 301 https://$host$request_uri;}
server { listen 443 ssl; server_name _;
ssl_certificate /etc/ssl/certs/cert.pem; ssl_certificate_key /etc/ssl/private/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!RC4; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
# 伪装网站 location / { root /usr/share/nginx/html; index index.html; }
# Xray WebSocket 代理 location /vless { 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; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; }}💡 关键配置说明:
80 → 443:HTTP 自动重定向到 HTTPSlocation /vless:将 WebSocket 请求转发给 XrayUpgrade $http_upgrade:支持 WebSocket 协议升级
伪装网站
路径:/opt/xray/html/index.html
PRTCL // HTML
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>Welcome to Nginx</title><style>body{font-family:Arial;margin:0;padding:0;display:flex;justify-content:center;align-items:center;height:100vh;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;}.container{text-align:center;background:rgba(0,0,0,0.3);padding:60px;border-radius:20px;}h1{font-size:48px;margin-bottom:20px;}p{font-size:18px;opacity:0.9;}.status{margin-top:30px;padding:10px 30px;background:rgba(255,255,255,0.2);border-radius:50px;display:inline-block;}</style></head><body><div class="container"> <h1>Welcome</h1> <p>Server is running.</p> <div class="status">Online</div></div></body></html>Docker Compose 配置
路径:/opt/xray/docker-compose.yml
PRTCL // YAML
version: '3.8'services: xray-core: image: teddysun/xray:latest container_name: xray-core volumes: - ./config/config.json:/etc/xray/config.json restart: unless-stopped network_mode: host healthcheck: test: ["CMD", "cat", "/etc/xray/config.json"] interval: 30s timeout: 10s retries: 3
nginx: image: nginx:alpine container_name: xray-nginx volumes: - ./html:/usr/share/nginx/html - ./nginx.conf:/etc/nginx/conf.d/default.conf - ./certs/cert.pem:/etc/ssl/certs/cert.pem - ./certs/key.pem:/etc/ssl/private/key.pem restart: unless-stopped network_mode: host💡 network_mode: host 的优势:
- 容器直接使用宿主机网络,避免端口冲突
- Nginx 可直接绑定 80/443 端口
部署命令
一键启动
PRTCL // BASH
cd /opt/xray
# 拉取镜像并启动docker-compose pulldocker-compose up -d
# 查看状态docker ps
# 查看日志docker logs xray-core --tail 20docker logs xray-nginx --tail 20常用管理命令
PRTCL // BASH
# 重启服务docker-compose restart
# 停止服务docker-compose down
# 重新加载配置docker-compose exec xray-core xray reload
# 更新 Xraydocker-compose pull xray-core && docker-compose up -d xray-core客户端配置
Clash / FlClash 配置
PRTCL // YAML
port: 7890socks-port: 7891allow-lan: falsemode: rulelog-level: infoexternal-controller: 127.0.0.1:9090
proxies: - name: HK-VLESS type: vless server: 154.222.24.65 port: 443 uuid: 60b3f6e5-1227-4487-8084-4bbb6503b923 network: ws tls: true udp: true sni: 154.222.24.65 skip-cert-verify: true ws-opts: path: /vless headers: Host: 154.222.24.65
proxy-groups: - name: 🚀 代理 type: select proxies: - HK-VLESS
rules: - GEOIP,CN,DIRECT - MATCH,🚀 代理FlClash 使用步骤
导入配置
- 方式一:扫描二维码
- 方式二:上传 YAML 文件
- 方式三:复制粘贴配置内容
关键设置
TLS:✅ 必须开启跳过证书验证:✅ 必须开启(自签证书)TUN 模式:✅ 需要开启
测试连接
- 选择节点 → 点击测试
- 超时说明连接失败,检查上述设置
安全加固
更换 UUID
定期更换 UUID 可提升安全性。
PRTCL // BASH
# 生成新 UUIDuuidgen
# 编辑配置nano /opt/xray/config/config.json# 将 "id" 字段替换为新 UUID
# 重载 Xraydocker-compose exec xray-core xray reload防火墙设置
PRTCL // BASH
# 仅开放必要端口ufw allow 22 # SSHufw allow 80 # HTTPufw allow 443 # HTTPSufw enable定期更新
PRTCL // BASH
# 更新 Docker 镜像docker-compose pulldocker-compose up -d
# 检查 Xray 更新docker pull teddysun/xray:latestdocker-compose up -d xray-core故障排查
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 连接超时 | 端口被占用 | ss -tlnp | grep 443 检查端口 |
| TLS 错误 | 证书问题 | 开启「跳过证书验证」 |
| 伪装失效 | Nginx 未启动 | docker logs xray-nginx 查看日志 |
| Xray 崩溃 | 配置错误 | docker logs xray-core 查看日志 |
日志查看
PRTCL // BASH
# Xray 日志docker logs xray-core --tail 50 -f
# Nginx 日志docker logs xray-nginx --tail 50 -f
# 系统日志journalctl -u docker -f连通性测试
PRTCL // BASH
# 服务器内部测试curl http://127.0.0.1/ # HTTPcurl https://127.0.0.1/ # HTTPS(自签证书)
# 外部测试curl https:// 你的服务器 IP/ # 伪装网站相关文件路径
| 文件 | 路径 |
|---|---|
| 工作目录 | /opt/xray/ |
| Xray 配置 | /opt/xray/config/config.json |
| Nginx 配置 | /opt/xray/nginx.conf |
| 伪装网站 | /opt/xray/html/index.html |
| TLS 证书 | /opt/xray/certs/ |
| Docker Compose | /opt/xray/docker-compose.yml |
总结
本部署方案实现了:
- ✅ 流量加密:TLS 1.3 全程加密
- ✅ 流量伪装:模拟正常 HTTPS 网站
- ✅ 抗封锁:VLESS + WebSocket 难以识别
- ✅ 易于管理:Docker 一键部署
- ✅ 高可用:自动重启,故障自愈
📅 部署日期:2026-04-19
🌐 服务器:香港 154.222.24.65
🔐 协议:VLESS + WebSocket + TLS
🐳 容器:xray-core + xray-nginx
R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.05.18
Auth_Verified: 2026.05.18
