架構:Nginx (雙網卡:公網 IP + 內網 IP) + Tomcat (僅內網 IP)
現象:Java 專案上傳圖片報錯 java.net.SocketException: Network is unreachable
排查:防火牆關閉、telnet 連通、FastDFS 22122 端口正常、配置檔內網 IP 正確
Tracker/Storage 服務啟動時綁定 0.0.0.0 (所有網卡),但向 Tracker 註冊時回報的是**公網 IP**。Client (Tomcat 端) 從 Tracker 獲取 Storage 資訊時拿到公網 IP,嘗試直連公網 IP 上傳,但 Tomcat 無公網網卡導致網路不通。
# 原配置
bind_addr=0.0.0.0
# 修改為內網 IP
bind_addr=10.10.11.67
# 綁定內網 IP
bind_addr=10.10.11.67
# 關鍵:tracker_server 必須指向內網 IP
tracker_server=10.10.11.67:22122
tracker_server=10.10.11.67:22122
bind_addr:服務監聽綁定的網卡 IP,限制只在內網介面提供服務tracker_server:Storage 向 Tracker 註冊時上報的 IP,Client 從 Tracker 獲取 Storage 列表時取得此 IPservice fdfs_trackerd restartservice fdfs_storaged restartgrep "bind_addr" /var/log/fdfs/trackerd.logtracker_server 參數決定 Client 連線目標 IP,必須與 bind_addr 一致┌─────────────┐ 內網 ┌─────────────┐ 內網 ┌─────────────┐
│ Client │ ───────────▶ │ Tracker │ ───────────▶ │ Storage │
│ (Tomcat) │ 10.10.11.x │ (10.10.11.67)│ 10.10.11.x │ (10.10.11.67)│
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ 公網 IP (無連線) │ 公網 IP (不綁定) │ 公網 IP (不綁定)
▼ ▼ ▼
無法連線 忽略公網 忽略公網
FastDFS 雙網卡環境部署的核心在於:**統一內網 IP 綁定與註冊**。透過 bind_addr 限制服務監聽介面,配合 tracker_server 指定註冊回報 IP,確保 Client 獲取到的 Storage 地址可直連。此原理同樣適用於 Redis、Kafka、ZooKeeper 等分散式中介軟體的多網卡部署場景。