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

Linux /etc/hosts 檔案深度解析:主機名稱與 IP 映射、本地 DNS 覆寫實戰

編輯:Win8 常見問題解答

/etc/hosts 是 Linux/Unix 系統的靜態主機名稱查詢表,優先順序高於 DNS。它讓您在不架設 DNS 伺服器的情況下,自訂主機名稱對應 IP,廣泛用於開發環境網域測試、封鎖廣告/追蹤網域、內部伺服器別名管理。本文詳細說明格式、各發行版差異、實戰範例與常見誤區。

檔案格式與語法

IP位址  主機名稱  [別名1 別名2 ...]
# 註解行以 # 開頭,系統忽略
  • 每行一筆映射,欄位以空白或 Tab 分隔。
  • 第一欄:IPv4 或 IPv6 位址。
  • 第二欄:標準主機名稱(FQDN 或短名稱)。
  • 第三欄起:別名,可多個。

經典範例

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       myhostname              # 部分發行版(Debian/Ubuntu)用於設定本機主機名
192.168.1.100   webserver.local         webserver   # 內部網站伺服器
192.168.1.200   db.internal             db          # 資料庫伺服器
# 封鎖廣告/追蹤
0.0.0.0         analytics.google.com
0.0.0.0         doubleclick.net

各發行版關鍵差異

發行版 主機名稱設定檔 說明
RHEL/CentOS/Fedora /etc/hostname hostnamectl set-hostname 永久修改
Debian/Ubuntu /etc/hostname + /etc/hosts 127.0.1.1 行 需同步修改兩處,否則 sudo 會報「unable to resolve host」
Arch Linux /etc/hostname 同 RHEL 系

實戰應用場景

  1. 開發環境網域模擬:將 myapp.test 指向 127.0.0.1,無需修改 DNS 或申請網域。
  2. 內部叢集管理:給每台伺服器設定短別名(web01, db01),SSH/腳本直呼別名。
  3. 封鎖惡意/廣告網域:導向 0.0.0.0 或 127.0.0.1,系統層級攔截(可搭配 StevenBlack/hosts 定期更新)。
  4. 測試新版網站:將正式網域暫時指向測試伺服器 IP,驗證無誤再切換 DNS。

優先順序與生效機制

名稱解析順序由 /etc/nsswitch.conf 的 hosts: 行決定,預設通常為:

hosts: files dns

即 先查 /etc/hosts (files),再查 DNS。修改 /etc/hosts 即時生效,無需重啟服務(除非應用程式快取 DNS,如瀏覽器、Java 應用需重啟)。

常見誤區與最佳實務

  • ❌ 將公網 IP 寫入 /etc/hosts 以「加速存取」—— DNS 快取與 CDN 就近節點通常更快,且 IP 變更會導致連線失敗。
  • ❌ 使用 127.0.0.1 封鎖網域卻忘記 IPv6(::1)—— 建議雙寫或使用 0.0.0.0(不回應連線,效能稍佳)。
  • ✅ 變更主機名稱時,同步修改 /etc/hostname 與 /etc/hosts,並執行 hostnamectl set-hostname newname(systemd 系統)。
  • ✅ 團隊協作專案,將共用 hosts 映射納入版控(如 dev.hosts),CI/CD 階段自動注入容器/VM。
Copyright © Windows教程網 All Rights Reserved