情境回顧
需將 PHPcms 整站從 A 伺服器遷移至 B 伺服器(Unix、PHP、MySQL 4.0.1)。目標主機無控制台,僅提供 FTP/MySQL 帳密。初期嘗試壓縮包上傳後解壓,卻發現目標主機缺少 zlib 庫無法解壓,只能逐檔上傳數千個檔案,卻遭遇「上傳幾個檔案即斷線/逾時」的頑疾。
根因分析:路由器阻擋 FTP 被動模式資料連接埠
家用寬帶環境(1.5M、多裝置共用路由器)下,FTP 用戶端預設使用 被動模式 (PASV):用戶端發起控制連線 (Port 21) 後,伺服器回應一個隨機高位埠供資料傳輸。若路由器未正確設定 PASV 埠範圍轉發 或 FTP ALG 功能失效,資料連線即無法建立,導致傳輸中斷。
解決方案:善用 FileZilla 內建網路設定向導
- 下載安裝 FileZilla Client(開源免費、跨平台)。
- 選單「編輯」→「設定」→「連線」→「FTP」→「被動模式」,勾選「使用自訂埠範圍」,例:
50000-51000。
- 點擊「網路設定向導」:

- 依嚮導指示:選擇「主動模式」或「被動模式(自訂埠)」,向導會自動偵測本機公網 IP 與路由器 UPnP/NAT-PMP 支援情況。
- 若向導報告「無法連線」或「埠被封鎖」,登入路由器管理介面:
▸ 開啟 DMZ 指向 FTP 用戶端內網 IP(簡易但較不安全)
▸ 或精確設定 虛擬伺服器/連接埠轉發:TCP 21(控制)+ TCP 50000-51000(資料)
▸ 啟用 FTP ALG (Application Layer Gateway) 功能(大多數家用路由器預設開啟)。
- 完成路由器設定後,再次執行網路設定向導,直至顯示「設定完成」。
驗證成果
設定完成後,FileZilla 可穩定維持數百個檔案連續上傳無斷線。同樣設定亦適用於其他 FTP 用戶端(WinSCP、CuteFTP 等),只需在其被動模式埠範圍設定一致即可。
補充技巧
- 大量小檔案傳輸前,建議先在本地端打包為
.tar.gz 或 .zip,上傳單一壓縮檔再遠端解壓,大幅減少連線建立開銷。
- 若目標主機支援 SFTP (SSH File Transfer Protocol),優先使用 SFTP(Port 22),單一加密通道免去 PASV 埠麻煩,且更安全。