適用於 v2rayN 可以開啟,但 Xray 啟動後隨即退出的情況。先保存完整的啟動日誌,再區分設定檔解析、參數建構及連接埠監聽三個階段;透過設定檔測試與本機連接埠查詢找出問題。本文也會說明為何直接修改產生的 config.json 容易失效,以及如何將修正套用至節點或自訂設定。
一、先確認退出的是 Xray 核心
v2rayN 是用戶端介面,Xray 則是執行代理設定的核心。主視窗仍可操作,不代表核心正常運作;反之,瀏覽器無法開啟網頁,也不能直接判定核心啟動失敗。需要依照本文流程排查的情況包括:切換節點後出現啟動錯誤、核心程序很快結束,或日誌反覆停在載入設定的階段。
先開啟主視窗底部的日誌面板,再重新選取目前的伺服器,並保留這次操作前後的完整輸出。特別留意包含 Failed to start、failed to load config files 或 failed to listen 的錯誤鏈。單一錯誤可能以 > 串接多個原因,最右側通常最接近根本原因;不要只截取最後一句「程序已退出」。
-
記錄現況
記下 v2rayN 版本、日誌顯示的 Xray 版本、目前節點協定及錯誤時間。分享日誌前,請遮蔽訂閱網址、UUID、密碼及伺服器位址等敏感資訊。
-
確認核心
前往「設定」→「參數設定」,確認目前協定使用的核心設定,並以啟動日誌中的 Xray 版本資訊為準。不同版本的設定分組名稱可能有所調整,請勿將其他核心的錯誤套用至本文指令。
-
備份設定
依照日誌中的設定檔路徑找到實際載入的檔案,並複製一份供排查使用。檔名可能是
config.json,也可能帶有其他前綴;請以啟動參數為準,不要只憑檔名猜測。 -
重現一次
先停止連續切換節點,只重現一次啟動問題。將這次的日誌與備份設定檔對照,避免拿上一個節點的錯誤來分析目前的節點。
二、透過設定檔測試區分解析錯誤與執行錯誤
優先使用 v2rayN 實際呼叫的 Xray 程式測試備份設定檔。同一份設定在不同核心版本中的支援情況可能不同;使用另一個舊版程式測試,反而可能造成誤判。以下是 Windows PowerShell 指令:將終端機切換至該核心所在目錄,並將測試用的設定檔副本命名為 config.json 後再執行。
.\xray.exe version
.\xray.exe run -test -config ".\config.json"
-test 用來讀取、建構並測試設定檔,不會啟動完整的代理服務。它能找出 JSON 解析錯誤、部分必要參數缺漏及無效的協定設定,但不能取代實際啟動,也無法驗證遠端帳號是否有效。請特別留意:測試通過不代表連接埠一定能成功監聽;連接埠衝突須在啟動階段另外檢查。
| 日誌位置或結果 | 優先檢查項目 | 下一步 |
|---|---|---|
| 讀取設定檔失敗 | 啟動參數、檔案路徑、讀取權限 | 確認測試的是日誌中實際載入的檔案 |
| 解析時出現 invalid character | 引號、逗號、括號及字串跳脫 | 先修正語法,再重新測試設定檔 |
| 建構出站設定時失敗 | protocol、settings、使用者參數 | 依照錯誤鏈檢查相關 outbound |
| 測試通過,但啟動監聽失敗 | 監聽位址、連接埠占用或系統限制 | 檢查本機連接埠及綁定位址 |
| 核心已啟動,造訪時才出錯 | 遠端連線狀態、TLS、DNS | 改查連線問題,不要再反覆修改 JSON 標點 |
三、JSON 語法錯誤:先修正標點,再檢查欄位
手動編輯自訂設定時,最常見的問題包括尾隨逗號、漏逗號、使用中文引號,以及反斜線未跳脫。某些載入方式允許註解,但為排除解析器差異,建議使用嚴格的 JSON 格式重現問題。請勿將網頁說明文字、程式碼區塊圍欄或行號一併貼入檔案。
錯誤:invalid character '}' looking for beginning of object key string
原因與解法:常見原因是物件最後一個屬性後多了逗號。檢查右大括號前一行,刪除不該出現的尾隨逗號,再測試設定檔。
錯誤:invalid character '"' after object key:value pair
原因與解法:兩個屬性之間可能漏了逗號。檢查錯誤位置附近上一個項目的結尾,不要只修改被標示的引號。
錯誤:unexpected EOF
原因與解法:檔案可能遭到截斷,或物件、陣列、字串尚未結束。先比對備份檔案的結尾,再確認括號是否成對。
以上是常見的解析錯誤片段,外層訊息前綴會因版本和載入器而異。JSON 解析器通常會指出「無法繼續讀取」的位置,真正的錯誤可能出現在上一行。例如,以下完整的 JSON 片段沒有尾隨逗號,可用來對照引號及分隔符;這只是日誌設定片段,並非完整的代理設定。
{
"log": {
"loglevel": "warning"
}
}
- 屬性名稱和字串值請使用英文雙引號,例如
"loglevel",不要使用中文彎引號。 - 布林值請寫成
true或false,不要為了修正語法而把所有值都改成字串。 - Windows 路徑在 JSON 字串中必須跳脫,例如
"C:\\Temp\\xray-error.log";該目錄也必須存在且可寫入。 - 請使用本機編輯器檢查設定,避免將含有節點憑證的完整檔案提交至線上格式化工具。
四、連接埠占用:查出是誰在監聽 10808
如果錯誤鏈已出現 listen tcp,應先檢查本機監聽狀態,而不是重新匯入訂閱。以下使用一組排查範例值:本機 SOCKS 連接埠為 10808、HTTP 連接埠為 10809,綁定位址為 127.0.0.1。這些數值並非所有版本的預設值;有些設定會使用混合式入站,只監聽一個連接埠,請以自己的產生設定為準。
錯誤:bind: address already in use
原因與解法:Linux 常見此錯誤,表示目標位址和連接埠已有其他程序在監聽。先查詢相關程序,再關閉重複的用戶端或調整入站連接埠。
錯誤:Only one usage of each socket address (protocol/network address/port) is normally permitted.
原因與解法:這是 Windows 常見的連接埠綁定衝突訊息。確認是否還有另一個核心程序未關閉,並檢查設定中是否有兩個入站項目使用相同的位址和連接埠。
在 PowerShell 中查詢監聽中的程序。第一個指令只讀取 TCP 監聽狀態,第二個會顯示程序資訊;PID 請使用本機查詢結果,不要照抄他人的數字。
Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
ForEach-Object { Get-Process -Id $_.OwningProcess }
如果確實同時執行了兩個用戶端,請先正常關閉多餘的執行個體,不要直接終止不明的系統程序。需要更換連接埠時,前往「設定」→「參數設定」,找到本機監聽連接埠項目,例如將 10808 改為未占用的 10818,儲存後重新載入核心。手動指定代理連接埠的應用程式也必須同步修改;由用戶端管理的系統代理則需重新設定。
結論:測試通過但監聽失敗,先檢查本機資源
只有實際錯誤涉及監聽時,才需要排查連接埠。如果查不到 TCP 監聽程序,卻仍出現拒絕存取,還應檢查監聽位址是否屬於本機,以及連接埠保留和安全性原則;不要把所有綁定錯誤都歸咎於節點失效。
五、欄位拼寫與協定參數:語法正確不代表設定有效
JSON 可以讀取,只代表文字結構大致正確。Xray 還會依照 protocol 建構入站和出站,並檢查協定所需欄位。例如將 vless 寫成 vles,雖然仍是合法字串,卻沒有對應的協定設定。其他未知欄位則可能遭到忽略,因此「沒有報錯」不代表欄位已生效。
錯誤:unknown config id: vles
原因與解法:協定識別字拼寫錯誤。請核對該出站的 protocol 是否與節點實際協定一致,不要試圖修改其他參數來避開這項錯誤。
錯誤:invalid UUID
原因與解法:可能是使用者 ID 無效,外層錯誤鏈通常會指出相關協定。請從原始節點重新複製 ID,檢查是否混入空格或中文符號,並確認沒有將密碼填入 UUID 欄位。
| 檢查項目 | 具體檢查內容 | 常見錯誤修法 |
|---|---|---|
| VMess / VLESS | 協定類型、伺服器連接埠及使用者 ID 必須與原始節點一致 | 只修改 protocol,卻保留另一種協定的整組 settings |
| VLESS 使用者參數 | 確認 encryption;常見設定為 none,flow 則依節點提供的值填寫 | 直接沿用 VMess 的使用者加密欄位 |
| 傳輸設定 | streamSettings 中的傳輸類型及其對應設定必須相符 | 更改傳輸類型後,仍保留不相關的路徑或服務名稱 |
| TLS / REALITY | security、serverName 及對應的安全層參數必須相符 | 混用兩種安全層的欄位,或以關閉驗證取代修正 |
| 路由目標 | outboundTag 應對應預期的出站 tag | 以為任意字串都會自動建立代理出口 |
節點位址、連接埠、UUID 或 TLS 網域填錯,有時不會阻止核心啟動,而是在首次連線時才顯現。不要為了看到「啟動成功」就隨意改用另一種協定,否則只會把原本的設定錯誤轉變為後續連線錯誤。欄位層級和路由關係可參閱設定參考逐項檢查。
六、以最小設定隔離問題,再逐項還原
設定檔很長,或包含多個入站和路由群組時,可以在副本中使用最小設定確認讀取與建構流程。以下範例只有本機 SOCKS 入站及直連出站,不包含遠端節點,也不能用來驗證代理出口。請另存為 minimal.json,不要覆蓋原有的訂閱或節點設定。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10818,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}
.\xray.exe run -test -config ".\minimal.json"
如果這個檔案能通過測試,而原設定無法通過,請分區塊逐步還原:先加入實際代理出站,再加入傳輸和安全層,最後還原 DNS 與路由。每還原一個區塊就重新測試;首次出錯的變更就是優先檢查範圍。若要實際執行這份最小設定,請先確認 10818 未被占用;它的所有流量都會直連,不應用來判斷原節點是否可用。
- 一次只變更一個項目:不要同時更換節點、修改連接埠及更換核心,否則無法判斷問題為何解除。
- 保留變更前後的差異:記錄欄位名稱及修改原因,排查筆記中不要留下完整憑證。
- 還原原有的保護設定:暫時調整日誌層級後請儘快還原;存取日誌可能包含目標網域等資訊。
- 最後驗證實際使用情況:核心穩定運作後,再檢查系統代理、瀏覽器連線及預期的出口。
七、設定錯誤排解常見問題
每次修好 config.json,切換節點後又出錯?
先確認它是否為 v2rayN 自動產生的執行設定。若是,請回到伺服器清單編輯對應節點,或修正自訂設定來源,再重新載入。只修改產生的檔案,無法保證下次仍保留變更。
設定檔測試通過,為什麼啟動仍然失敗?
請繼續查看啟動日誌中的監聽錯誤,並查詢實際的入站連接埠。測試不會驗證遠端連線狀態,也無法確保執行時連接埠可用;不要將測試通過視為網路連線已完全正常。
日誌只有退出提示,沒有具體錯誤,該怎麼辦?
保留用戶端顯示的啟動指令和設定檔路徑,使用同一個 Xray 程式在終端機執行設定檔測試。若仍沒有輸出,請檢查 log 中 error 檔案的路徑及讀取權限,確認錯誤是否寫入獨立日誌。
重新安裝用戶端能直接解決問題嗎?
先備份節點和訂閱設定,再判斷問題發生的階段。連接埠遭其他程序占用、訂閱參數錯誤或入站重複等問題,通常不會因重新安裝而消失。只有確認程式檔案異常或版本不相容後,才考慮更換相容版本。
排查完成的標準不是錯誤視窗消失,而是能說明根本原因並重複驗證:原設定為何失敗、哪項修改讓測試通過,以及重新啟動用戶端後是否仍正常。若要進行實際連線,可接著依照使用指南選擇節點並驗證代理;不要混淆設定建構完成、監聽成功和遠端連線正常這三種結果。