對於全球數百萬開發者來說,GitHub 是現代軟體開發的神經中樞。但在許多地區——特別是亞洲部分地區、中東和南美洲——存取 GitHub 可能是一種令人沮喪的體驗:頁面需要幾十秒才能載入、個人資料圖片和儲存庫頭像無法呈現、git clone 操作超時,而且發行版無法下載。GitHub520 的存在就是為了解決這類特定問題,採用優雅而簡單的方法。
由 HelloGitHub 團隊(一個策劃熱門專案的中文開源社群)所建立,GitHub520 已成為該平台上星數最多的網路工具專案之一。它的前提很直接:GitHub 存取緩慢很少是故意封鎖造成的,而是次佳的 DNS 解析和 CDN 路由所致。透過維護一個持續更新的 hosts 檔案,將 GitHub 的關鍵網域映射到最快的可用 CDN IP 位址,GitHub520 有效地繞過了故障的 DNS 管線,恢復了正常的存取速度。
該專案基於一個簡單的觀察:GitHub 使用由 Fastly 和 Akamai 提供的全球內容傳遞網路。從特定地區對 github.com 進行 DNS 查詢,可能會傳回位於世界另一端的伺服器,即使有更近的邊緣節點可用。透過將最佳 IP 位址硬編碼到系統 hosts 檔案中,流量會直接路由到最近、最快的伺服器。
GitHub520 在底層是如何運作的?
該專案的工程設計極簡。一個 GitHub Actions 工作流程按排程觸發器(目前每天兩次)執行,並對 GitHub 的主要網域進行 DNS 解析:github.com、api.github.com、assets-cdn.github.com、raw.githubusercontent.com、user-images.githubusercontent.com 以及若干其他網域。
該工作流程對每個網域進行多次解析,以找到回應最快的 IP 位址,然後將結果格式化為標準的 hosts 檔案格式。輸出從 raw.githubusercontent.com 提供服務,也作為 GitHub Pages 網站發佈在 raw.hellogithub.com/hosts。
flowchart TD
A[GitHub Actions 排程觸發<br>每天兩次] --> B[解析所有 GitHub<br>網域的 DNS]
B --> C[測量 CDN 端點的<br>回應時間]
C --> D[為每個網域選擇<br>最快的 IP]
D --> E[產生 hosts 檔案<br>條目]
E --> F[發佈到:<br>- GitHub Pages<br>- 原始內容 URL]
F --> G[使用者下載<br>並套用 hosts]
G --> H[GitHub 流量路由<br>到最佳 CDN 節點]
H --> I[更快的頁面載入、<br>git clone、圖片載入]| GitHub 網域 | 用途 | 典型改善 |
|---|---|---|
github.com | 主要網站、儲存庫 | 頁面載入速度提升 5-20 倍 |
api.github.com | REST API 端點 | 更快的 CLI 操作 |
assets-cdn.github.com | CSS、JavaScript、字型 | 完整頁面渲染 |
raw.githubusercontent.com | 原始檔案服務 | 快速原始檔案存取 |
user-images.githubusercontent.com | 個人資料圖片、螢幕截圖 | 圖片載入而非中斷 |
codeload.github.com | ZIP/tarball 下載 | 成功的發行版下載 |
如何安裝與使用 GitHub520
安裝過程因平台而略有不同,但遵循相同的一般模式:下載最新的 hosts 檔案並用它取代系統 hosts 檔案。
| 平台 | Hosts 檔案位置 | 安裝方法 |
|---|---|---|
| Windows | C:\Windows\System32\drivers\etc\hosts | PowerShell 腳本(管理員) |
| macOS | /etc/hosts | 終端機腳本 (sudo) |
| Linux | /etc/hosts | 終端機腳本 (sudo) |
| Android | /system/etc/hosts | 需 root,或使用應用程式 |
對於 Windows,以系統管理員身份開啟 PowerShell 並執行儲存庫中提供的單行程式碼。對於 macOS 和 Linux,該專案提供了一個 shell 腳本,可備份現有的 hosts 檔案、下載新條目並附加它們:
# macOS/Linux 範例
curl -s https://raw.hellogithub.com/hosts >> /etc/hosts
該專案還提供一個「dev」hosts 檔案,其中包含對開發者有用的其他網域,例如 gist.github.com、github.io 和 githubstatus.com。
GitHub520 解決了哪些問題?
| 問題 | 根本原因 | GitHub520 解決方案 |
|---|---|---|
| 頁面載入非常緩慢 | DNS 解析到遠端 CDN 節點 | 導向最近的 CDN 邊緣 |
| 頭像和圖示中斷 | 圖片 CDN 解析失敗 | 硬編碼最佳圖片伺服器 IP |
| git clone 失敗或超時 | 次佳路由上的封包遺失 | 有效路由 clone 流量 |
| 發行版下載永遠無法完成 | 下載的 CDN 路由問題 | 最佳化下載伺服器路由 |
| GitHub Actions 執行器緩慢 | API 端點延遲 | 更快的 API 回應時間 |
sequenceDiagram
participant User as 使用者的電腦
participant LocalDNS as 本地 DNS 解析器
participant CDN as GitHub CDN (Fastly)
participant GitHub as GitHub 伺服器
Note over User,LocalDNS: 沒有 GitHub520
User->>LocalDNS: 解析 github.com
LocalDNS-->>User: 緩慢/次佳的 IP 位址
User->>CDN: HTTP 請求到遠端節點
CDN-->>User: 高延遲、頻繁超時
Note over User,LocalDNS: 使用 GitHub520
User->>User: 讀取 /etc/hosts(有 GitHub520 條目)
User->>CDN: 直接連接到最佳節點
CDN-->>User: 快速回應、無超時GitHub520 與替代方案比較如何?
| 解決方案 | 方法 | 更新頻率 | 需要安裝 | 技術複雜度 |
|---|---|---|---|---|
| GitHub520 | Hosts 檔案條目 | 每天兩次 | 否 | 非常低 |
| VPN | 加密隧道 | 持續 | 是 | 中等 |
| DNS over HTTPS | 加密 DNS 查詢 | 即時 | 取決於作業系統 | 低至中等 |
| Cloudflare WARP | 最佳化路由 | 即時 | 是 | 低 |
| 代理 (HTTP/SOCKS) | 透過代理中繼 | 持續 | 是 | 中等到高 |
GitHub520 以其簡單性脫穎而出。與 VPN 或代理不同,它不需要任何背景程序、訂閱或設定。與基於 DNS 的解決方案不同,它不依賴於正常運作的 DNS 解析器。它是一個任何電腦都能讀取的純文字檔案。
關於 GitHub520 的常見問題
GitHub520 適用於 GitHub Enterprise 和 GitHub Actions 嗎?
GitHub520 主要處理主要的公共 GitHub 網域。對於 GitHub Enterprise Server(自架)實例,hosts 條目需要針對特定安裝的網域進行自訂。依賴 api.github.com 的 GitHub Actions 執行器受益於 API 路由的改善,但執行器到 Actions 工件儲存的連線取決於其他可能涵蓋或可能未涵蓋的網域。
該專案維護了一個「dev」hosts 變體,其中包含用於開發者工作流程使用案例的更廣泛網域集合,從而改善了對 GitHub Actions 和 Codespaces 互動的覆蓋範圍。
GitHub520 使用安全嗎?
GitHub520 散佈的 hosts 檔案條目僅指向由 Fastly 和 Akamai 提供的官方 GitHub IP 位址——這些正是 GitHub 預設使用的相同 CDN。該專案不會透過任何第三方伺服器或代理路由流量。原始碼和工作流程完全透明,並在 GitHub 上公開可見。社群的定期審計報告確認這些 IP 位址與官方 GitHub CDN 範圍相符。
話雖如此,使用者應始終在套用更新後驗證其 hosts 檔案的完整性,並保留安裝腳本自動建立的備份副本。
延伸閱讀
- GitHub520 儲存庫 — 原始碼、安裝腳本和議題追蹤器
- HelloGitHub 社群 — GitHub520 背後的開源社群
- 維基百科上的 Hosts 檔案機制 — hosts 檔案在作業系統層級運作的背景知識
- Fastly CDN 文件 — GitHub 的主要 CDN 供應商
- GitHub DNS 設定指南 — 官方 GitHub 網路設定建議