Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Win7 下 localhost vs 127.0.0.1 效能差百倍?IPv6 解析導致 PHP 連線嚴重延遲

編輯:Win7 常見問題解答

Windows 7 (含 Vista/Server 2008+) 預設將 localhost 解析為 IPv6 回環位址 ::1,而非 IPv4 127.0.0.1。這在 PHP 等伺服器端程式連接本機資料庫 (MySQL/PostgreSQL) 時,會導致連線建立延遲達百倍以上,嚴重拖慢本地開發/測試效能。

現象實測

> ping localhost
回覆自 ::1 時間<1ms  ← IPv6 回環

> ping 127.0.0.1
回覆自 127.0.0.1 時間<1ms  ← IPv4 回環

修改 C:\Windows\System32\drivers\etc\hosts,將 localhost 指向 127.0.0.1 後,PHP 連線速度瞬間恢復正常。

效能對比 (Discuz! 論壇測試)

連線方式頁面載入時間相對效能
localhost (預設 ::1)~15 秒基準 (極慢)
127.0.0.1~0.1 秒快 150 倍

根因分析

  • Win7+ 預設啟用 IPv6,localhost 在 hosts 中無明確 IPv4 記錄時,DNS 客戶端優先解析 AAAA 記錄 (::1)。
  • PHP MySQL 驅動 (mysqli/pdo_mysql) 連接 localhost 時,嘗試 IPv6 連線失敗/超時後再回退 IPv4,過程耗時極長(驅動實作、TCP 回退機制、防火牆規則皆影響)。
  • 直接使用 127.0.0.1 繞過 DNS 解析,強制 IPv4 連線,零延遲。

解決方案 (三選一)

  1. 修改 hosts (推薦,一勞永逸):
    編輯 C:\Windows\System32\drivers\etc\hosts (需管理員權限),確保包含:
    127.0.0.1 localhost
    刪除或註解掉 ::1 localhost 行。存檔後 ipconfig /flushdns 生效。
  2. PHP 設定檔指定 127.0.0.1:
    mysqli_connect('127.0.0.1', ...) 或 PDO DSN host=127.0.0.1,不依賴主機名解析。
  3. 停用 IPv6 (不建議):
    網卡屬性取消「網際網路通訊協定第 6 版 (TCP/IPv6)」勾選。會影響其他 IPv6 相依服務,副作用大。
最佳實踐:本地開發環境統一使用 127.0.0.1 連接資料庫/快取/訊息佇列,避免主機名解析不確定性。生產環境同樣建議在應用程式設定中明確指定 IP,而非依賴 localhost 解析。此問題在 Win10/11、Linux (啟用 IPv6 時) 同樣存在,跨平台通用原則。
Copyright © Windows教程網 All Rights Reserved