1247 字
6 分钟
Xray节点搭建教程
2025-08-17
2025-09-28
CAUTION

本教程仅适用于于个人使用,请勿将其用于非法目的,请勿在生产环境中使用。

由此造成的一切后果由使用者自行承担

前言#

该教程仅适用于同时使用 Xray Xhttp TLS Nginx/Caddy 的人,否则该教程大部分内容对你无用

XTLS
/
Xray-core
Waiting for api.github.com...
00K
0K
0K
Waiting...

使用Docker部署Xray#

Docker Image#

  1. Docker Hub
  2. Github

Docker run命令#

docker run -d \
--name xray \
-v "/your-path:/etc/xray" \
-p "127.0.0.1:your-port:your-port" \
--restart unless-stopped \
teddysun/xray:latest

Docker Compose#

services:
xray_xhttp:
image:'teddysun/xray:latest'
container_name:xray
volumes :
-/your-path:/etc/xray
ports:
-'127.0.0.1:your-port:your-port'
restart:unless-stopped

任选一种方式使用 Docker 部署 Xray ,注意命令与配置文件有部分需要修改

IMPORTANT

如果你设置 Docker 仅监听来自 Localhost 的特定端口, Xray 配置文件中请务必不要设置监听 Localhost

Xray服务端配置#

{
"log": {
"loglevel": "warning",
"error": "/var/log/xray/error.log",
"access": "/var/log/xray/access.log"
},
"inbounds": [
{
"port": , //VLESS+XHTTP 监听端口 需与Docker转发端口对应
"protocol": "vless",
"settings": {
"clients": [
{
"id": "", //修改为自己的 UUID
"email": "" //可随意填
}
],
"decryption": "none"
},
"streamSettings": {
"network": "xhttp",
"xhttpSettings": {
"path": "" //修改为自己的路径 建议为纯英文与数字,可包含大小写,不包含特殊符号
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"dns": {
"servers": [
"https+local://1.1.1.1/dns-query",
"localhost"
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"protocol": [
"bittorrent"
],
"outboundTag": "block"
},
{
// 防止服务器直连国内
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "wireguard-1"
},
{
"type": "field",
"domain":["geosite:cn","geosite:geolocation-cn"],
"outboundTag":"wireguard-1"
}
]
},
"outbounds": [
{
"tag":"direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {}
},
{ //如果不想使用Warp outbounds,请删除此出站配置,并移除routing页的对应路由项
"protocol": "wireguard",
"settings": {
"secretKey": "",
"address": [""],
"peers": [
{
"publicKey": "",
"endpoint": "e"
}
],
"reserved":[0, 0, 0]
},
"tag": "wireguard-1"
}
]
}

此配置为 Xray+Xhttp+TLS ,部分参数需自行修改

TLS(传输层安全)部分需在客户端配置

NOTE

Warp outbounds配置请参照 Project X

WARNING

传输层安全中的 Reality 目前看来有非常明显的特征,不建议使用

为什么这么说,假设你使用 Reality 偷了 Apple 的证书,GFW 检测流量时发现带着 www.apple.com SNI 头的流量流入了非 AppleASN ,例如 IT7 Network ,这不是很奇怪吗,非常明显的特征

启动#

你需要将此配置文件放置于 Docker 所映射的配置文件夹中,并重命名为 config.json

Nginx反向代理#

配置#

server {
listen 443 ssl http2; //监听IPV4 443
listen [::]:443 ssl http2; //监听IPV6 443
server_name your-domain; //修改为你的域名
ssl_certificate your-cert-path; //修改为你的证书路径 绝对路径
ssl_certificate_key your-key-path; //修改为你的私钥路径 绝对路径
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
location /your-path { //与Xray中的Xhttp路径对应
grpc_pass grpc://127.0.0.1:your-port; //与Docker所监听的实机端口对应
grpc_set_header Host $host;
client_body_timeout 5m;
grpc_read_timeout 300;
grpc_send_timeout 5m;
grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / { //伪装站点
proxy_pass http://127.0.0.1:your-port; //与伪装站点所监听的端口对应
}
}
IMPORTANT

本配置不支持 HTTP3ECH ,需要请自行查看文档添加

TLS需要完整证书链的证书才能正常与 Xray 服务端建立链接,如果使用类似 acme 的项目,请务必使用包含完整证书链的证书与密钥

Caddy反向代理#

配置#

your_domain {
tls {
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
}
handle /your-path/* { //与Xray中的Xhttp路径对应
reverse_proxy 127.0.0.1:your-port { //与Docker所监听的实机端口对应
transport http {
versions h2c 2
}
}
}
handle /* {
reverse_proxy 127.0.0.1:your-port { #与你所使用的伪装站点所监听的端口对应,也可直接拒绝访问,但会有较为明显的特征
header_up Host {http.request.host}
}
}
}
IMPORTANT

Caddy 会自行申请需要的 SSL证书

该配置同时兼容 HTTP3HTTP2

Caddy ECH支持#

CAUTION

该部分可能导致不可知的问题,请考虑好个人能力后再进行操作

Caddy 所发行的正式版不包含 ECH 支持,你需要使用内置了 DNS模块 的 Caddy 版本

使用Caddy官方命令添加模块#

首先你需要确保你已经正确安装了 Caddy ,此处以 Cloudflare DNS 为例

执行以下命令

caddy add-package github.com/caddy-dns/cloudflare

并在Caddyfile中添加如下配置

{
dns cloudflare your-key //此处key使用Cloudflare官方api令牌替换
ech example.com //任意一个域名均可,此为ECH公共名称,建议选择 cloudflare-ech.com
}
NOTE

Cloudflare 中申请api令牌,需包含区域DNS读取与编辑权限,建议将源限制为你的服务器IP以确保安全性

完成这一切之后,等待 Caddy 自动生成 ECH 密钥即可

使用Dig命令验证ECH有效性#

dig test.example.com TYPE65 //将 test.example.com 替换为你在Caddyfile中所使用的公用名

如输出包含类似如下内容则有效

ech=AEr+DQBGlwAgACBVSsnixVAfd/Ca9HP9JTf2O+B1kynOkZIwAMASDASDQABAAIASDASDADHw9lY2guZXhhbXBsZS5jb20AAA==
NOTE

如果需要重新/取消部署 ECH ,请删除 /$HOME/.local/share/caddy/ech/configs,并移除 Cloudflare 中的 HTTPS记录

$HOME就是你的用户目录

将ECH添加到Xray#

将如下配置添加至 streamSettings

"tlsSettings"{
"echConfigList": "https://1.1.1.1/dns-query"
}
IMPORTANT

仅需添加至客户端配置,服务端 ECH 由反向代理进行处理

Xray节点搭建教程
https://blog.shrairo.top/posts/xray/
作者
Cassiopeia
发布于
2025-08-17
许可协议
CC BY-NC-SA 4.0