開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


XHTTP 設定會建立新的傳輸路徑,並非把欄位改名便完成。先加設獨立入口,證明一個客戶端能經它傳送和接收資料,同時保留舊入口作回退。本文採用兩端 Ubuntu 24.04 LTS x64、Xray v26.3.27,限定直連 TLS、HTTP/2 及明確的 stream-up 模式。[1][2]
關鍵要點
- 試驗入口獨立使用程式、服務、設定、TCP 連接埠及 UUID。
- 驗收期間保留舊伺服器服務與客戶端設定。
- 兩端須對應路徑、模式、TLS 名稱及登入資料。
- 分別檢查上載、下載、長請求、拒絕及回退。
- 初次遷移不加入 CDN、反向代理、REALITY、H3 或上下載分流。
上述是文件適用版本,未完成完整端到端實測。以下是檢查方法和預期行為,並非量測結果。先按自建任務與復原清單確定驗收邊界。
保留舊監聽、服務身份、憑證流程、防火牆規則及客戶端設定。記下原有單元的程式與設定路徑,以及連接埠歸屬。舊設定及客戶端匯出檔存於只有管理員可讀的備份,不公開 UUID、密鑰、位址或目的地日誌。
只使用自有或已獲授權的伺服器,保留控制台復原途徑,經獨立可信渠道核實 SSH 主機密鑰。採用嚴格驗證和專用 known_hosts;密鑰不符、已撤銷或未核實便停止。VPN 試驗不能成為唯一管理通道。
需要自行營運 Xray、觀察傳輸行為時,這條路線才有意義。若管理升級和憑證無助於你的工作,改動可用入口前先比較 VPS 與 VPN 的責任。XHTTP 亦不會取代協議、傳輸與混淆的分層。
選未被佔用的 TCP 連接埠,本文用 8443,並準備自有域名 xhttp.example.com。檢查 sudo ss -lntup 及供應商防火牆。預留獨立單元 xray-xhttp.service、本機入口 127.0.0.1:1081 及新 UUID;另以一個客戶端程序或應用程式觀察舊路徑。
可行時只向預期客戶端放行 TCP 8443。本路線不需要 UDP 監聽。保留原 SSH 規則及憑證續期驗證埠;新增 TLS 監聽不代表可以停用防火牆或接管原 ACME 服務。
從官方 v26.3.27 發行下載 Linux 64 位元壓縮檔,查看發行說明和已公開驗證資料,在本機解壓。以 root 將程式安裝至 /opt/xray-xhttp/v26.3.27/xray,權限 0755;如附有配套資料檔,同樣保留在該目錄。Ubuntu 客戶端也採取相同安裝方式。[1]
兩端執行 /opt/xray-xhttp/v26.3.27/xray version,私密保存輸出。不換成預發行版本,也不默默混用不同核心。以 /opt/xray-xhttp/v26.3.27/xray uuid 產生新身份,保存於私密筆記及兩端設定檔。
建立沒有登入 shell 的系統帳戶 xray-xhttp,將 /etc/xray-xhttp 設為 root:xray-xhttp、0750。經現有授權 ACME 流程取得涵蓋 xhttp.example.com 的公開受信任憑證。將完整鏈及私鑰副本存於此目錄,擁有者為 root:xray-xhttp、權限 0640;只開放這些副本,不授予整個無關憑證庫的讀取權。
現有續期機制須原子更新副本,驗證後只重新啟動此試驗服務。切換日常使用客戶端前先記錄該 hook。若尚無憑證流程,先另行建立;本文不啟動第二個爭用 TCP 80、443 的 ACME 守護程式。
用 sudoedit 建立 /etc/xray-xhttp/server.json,以新 UUID 取代 REPLACE_NEW_UUID。此固定版本的 VLESS 入站使用 clients,出站使用 users;不要直接移植較新文件的入站欄位。[3]
{
"log": {"loglevel": "warning"},
"inbounds": [{
"tag": "xhttp-trial",
"listen": "0.0.0.0",
"port": 8443,
"protocol": "vless",
"settings": {
"clients": [{"id": "REPLACE_NEW_UUID"}],
"decryption": "none"
},
"streamSettings": {
"network": "xhttp",
"security": "tls",
"tlsSettings": {
"alpn": ["h2"],
"certificates": [{
"certificateFile": "/etc/xray-xhttp/fullchain.pem",
"keyFile": "/etc/xray-xhttp/privkey.pem"
}]
},
"xhttpSettings": {
"path": "/migration-stream/",
"mode": "stream-up"
}
}
}],
"outbounds": [{"tag": "direct", "protocol": "freedom"}]
}
此範例只監聽 IPv4。域名 A 記錄須指向正確伺服器,不宣告未配置的 IPv6 入口。VLESS 的 none 欄位沒有提供傳輸加密;本例由 TLS 負責,亦沒有設定 Vision flow。
在客戶端的 0700 用戶目錄建立 0600 的 client.json:
{
"log": {"loglevel": "warning"},
"inbounds": [{
"listen": "127.0.0.1",
"port": 1081,
"protocol": "socks",
"settings": {"auth": "noauth", "udp": false}
}],
"outbounds": [{
"tag": "new-entry",
"protocol": "vless",
"settings": {
"vnext": [{
"address": "xhttp.example.com",
"port": 8443,
"users": [{"id": "REPLACE_NEW_UUID", "encryption": "none"}]
}]
},
"streamSettings": {
"network": "xhttp",
"security": "tls",
"tlsSettings": {
"serverName": "xhttp.example.com",
"alpn": ["h2"],
"allowInsecure": false
},
"xhttpSettings": {
"path": "/migration-stream/",
"mode": "stream-up"
}
}
}]
}
一致路徑及明確模式讓試驗範圍可控。stream-up 採串流上載,另設下載路徑;真正的 TLS 終點須支援 H2。只重命名 gRPC 欄位,不會建立這些行為。[2][4]
將 server.json 設為 root:xray-xhttp、0640。伺服器檔案以服務帳戶檢查,客戶端檔案以目前用戶檢查:
sudo -u xray-xhttp /opt/xray-xhttp/v26.3.27/xray run -test -config /etc/xray-xhttp/server.json
/opt/xray-xhttp/v26.3.27/xray run -test -config ./client.json
兩端都須成功退出。這不證明實際憑證信任、遠端認證或資料傳送成功;正式檔案亦不可保留示例佔位內容。
以 root 建立 /etc/systemd/system/xray-xhttp.service:
[Unit]
Description=Independent Xray XHTTP trial
After=network-online.target
Wants=network-online.target
[Service]
User=xray-xhttp
Group=xray-xhttp
WorkingDirectory=/opt/xray-xhttp/v26.3.27
ExecStart=/opt/xray-xhttp/v26.3.27/xray run -config /etc/xray-xhttp/server.json
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
UMask=0077
[Install]
WantedBy=multi-user.target
執行 sudo systemctl daemon-reload 及 sudo systemctl start xray-xhttp。確認此單元 PID 持有 TCP 8443,舊單元仍保留原監聽。啟動失敗時查看受限 journal。這個階段毋須先啟用開機自動啟動。
以指定執行檔完整路徑執行 xray run -config ./client.json,保持前景運作。只把試驗應用程式設為 SOCKS5 127.0.0.1:1081,並確認另一應用程式或客戶端仍經舊入口。排障時不要一次停止全部 Xray 程序。
準備你管理的 HTTPS 端點,提供已知下載內容、上載收據及刻意延長的回應。使用無敏感資料的測試檔,預先限制時間和大小。未獲同意,不向第三方診斷網站上載檔案。
curl --fail --show-error --noproxy '' --proxy socks5h://127.0.0.1:1081 https://check.example.net/download -o ./download.bin
curl --fail --show-error --noproxy '' --proxy socks5h://127.0.0.1:1081 --data-binary @./trial.bin https://check.example.net/upload
替換兩個受控網址,把下載內容及上載收據與原檔核對。再經舊客戶端實際本機連接埠執行同一任務,記錄完成情況、方向、時間及錯誤。首個頁面很快,不代表持續上載正常。
每次以客戶端副本做負例時,先停止上一個前台測試程式,再只用修改後的副本啟動同一回環連接埠,確認監聽屬於該程式。每次只改一個條件;下一項前恢復正確檔案並重做正例請求。
| 單項改動或檢查 | 預期行為 | 停止或復原措施 |
|---|---|---|
| UUID、TLS 名稱、路徑及模式正確 | 上載和下載均正確完成 | 切換前先找出失敗方向 |
| 客戶端副本只換另一個新 UUID | 新代理請求認證失敗 | 如成功,查繞過、程序身份及伺服器用戶列表 |
serverName 改為憑證未涵蓋的自有域名 | 憑證名稱驗證失敗 | 恢復正確名稱,保留 allowInsecure: false |
客戶端路徑改為 /different-trial/ | 試驗請求無法匹配 | 恢復完整路徑;只改後綴可能仍匹配伺服器前綴 |
只把客戶端模式改成 packet-up | 明確 stream-up 伺服器拒絕 packet-up 上載 | 恢復模式;模式檢查不代替 UUID 認證 |
| 新入口執行長請求,同時獨立觀察舊入口 | 試驗可用,舊服務保留監聽及原有任務 | 舊流量受影響便停止試驗 |
| 只重新啟動試驗服務 | 新路徑的新請求恢復 | 核對持久設定及憑證權限 |
指定版本檢查路徑前綴,並區分 packet-up 與 stream-up 上載處理。某些其他模式組合可能獲接受,不要宣稱所有不同模式都會被拒絕。[5]使用上面的不同前綴路徑及 packet-up 負例,每項之後恢復有效設定。
在已設定代理的瀏覽器開啟IP 位址工具,比較該請求與預期出口。這不涵蓋全部 DNS、IPv6、UDP 或應用程式。舊 gRPC 路徑若仍有獨立故障,參考gRPC 逾時排查,不要假設新路徑已修好舊故障。核心角色另見Xray 與 V2Ray 的作用。
雙向資料、持續請求、負例、憑證續期處理及試驗重新啟動全部符合驗收條件後,才修改一個客戶端儲存的應用程式設定。保留舊設定。已建立連線不會自動換入口,讓其完成或有意重新連線;改設定後以新請求核實。
回退由客戶端開始:恢復舊設定或本機 SOCKS 入口,驗證新請求,再停止前景試驗客戶端。伺服器執行 sudo systemctl disable --now xray-xhttp,不編輯原有單元。保存私密復原證據後,只刪除試驗規則、UUID、設定及不再需要的憑證副本。確認此服務不再持有 TCP 8443,而舊入口仍正常。
日後升級先準備另一版本目錄,修改此單元前檢查兩端檔案,重做相同驗收矩陣。暫時保留相容回退副本,不能永久停留在有漏洞的核心。即使一個客戶端成功遷移,亦不可因此移除其他用戶仍依賴的舊入口。
安全遷移保留原本可用路徑,再加入可獨立觀察的試驗。設定匹配、雙向資料、明確拒絕及可行復原是驗收條件;本文不聲稱作者部署已通過實測。
不可以。須安裝相容核心,在兩端建立匹配的傳輸設定,再分別檢查實際上載和下載,而非只改欄位。
獨立歸屬讓你停止試驗時毋須重新啟動舊入口,也較容易辨認監聽、設定檔選擇及回退對象的錯誤。
不代表。語法檢查無法確認遠端授權,須先用正確 UUID 存取受控目的地,再換另一有效 UUID 檢查拒絕。
不是,接受行為取決於指定實作。本文用 packet-up 客戶端配合明確 stream-up 伺服器,檢查這個特定組合的拒絕。
不足夠。還要測上載、持續請求、拒絕、重新啟動及復原;單一客戶端達到驗收條件前應保留舊入口。
既有連線保留原來路徑。應有意切換客戶端設定,以新請求驗證新入口,之後才考慮退役舊服務。
先核對剩餘用戶和復原需要。這個單一客戶端流程沒有授權刪除其他客戶端仍在使用的入口。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。