用 Squid 搭建本地 CDN 緩存代理爲網頁提速

用 Squid 搭建本地 CDN 緩存代理爲網頁提速

4 人贊了文章

身處海外,經常遇到訪問國內網站速度緩慢。而且網站不對靜態文件進行瀏覽器緩存優化,每次刷新頁面都要重新加載所有資源文件,而且很多網站內嵌很多個 iframe,每一個都調用一下 jQuery 之類的重量級腳本,再加上 TCP 掉包失連頻繁發生,整體的加載效率之慢可想而知。

所以特地針對這種情況折騰了一個解決方案:在本地用 Squid 搭建一個 HTTP 緩存代理服務器,編寫緩存規則自動將常用網站的靜態文件長期緩存,第一次經過該代理加載成功後,Squid 會把資源緩存在硬盤,之後每次的相同請求都會直接將硬盤中的緩存返回給瀏覽器,不需要再向源地址請求資源。說白了就是本地搭建了一個 CDN 緩存服務器罷了。

Squid 在 Linux/Unix 下的安裝過程我就不講了。Windows 下的安裝過程有些坑要提一提。

首先下載 Squid for Windows,安裝完後運行 Squid Server Tray,會在系統托盤出現 Squid 圖標。右鍵 Stop Squid Service,但後 Open Squid Configuration,按照下面的配置模板寫好 Squid 配置。

# Squid 監聽的 HTTP Proxy 埠http_port 3128# 緩存目錄。參數:# cache_dir Type Directory Mbytes L1 L2 [options]# - Type: 緩存數據格式,建議使用 aufs# - Directory: 目錄地址,因爲 Squid for Windows 是運行# 在 Cygwin 虛擬 POSIX 環境中,如果你想要設置的目錄是# D:Squidcache,則寫成 /cygdrive/d/Squid/cache# - Mbytes: 緩存大小限制(MB)# - L1, L2: 緩存目錄一級二級文件夾數目,建議保持默認值cache_dir aufs /cygdrive/d/Squid/cache 20480 16 256# 在這部分添加常用網站的緩存規則。參數:# refresh_pattern [-i] regex min percent max [options]# - -i: 正則匹配忽略大小寫# - regex: 緩存規則對應的正則表達式,用來匹配請求 URL,# 如果匹配成功則使用該規則處理請求# - min: 該規則對資源緩存至少多少分鐘,對動態內容建議# 設爲 0,靜態內容則越大越好# - percent: 該資源至少緩存上次生命週期的百分比# - max: 該規則對資源緩存最大多少分鐘# 對於 options,推薦使用 override-expire ignore-no-store# ignore-private ignore-reload 的組合強制進行靜態資源緩存# - 參考 http://www.luocheng.cn/article-view-209.htmlrefresh_pattern ^https?://....bdstatic.com/ 43200 90% 432000 override-expire ignore-no-store ignore-private ignore-reload refresh_pattern ^https?://assets.xxxxx.com 43200 90% 432000 override-expire ignore-no-store ignore-private ignore-reload refresh_pattern . 0 20% 4320# 定義一個叫 localnet 的 IP 組,包含所有內網地址acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines# 允許本地連接通過代理http_access allow localhost manager localnet http_access allow localnet http_access allow localhost# 防止 Squid 在 HTTP Request Header 中亂添加東西# 導致某些網站檢測到 Proxy 特徵而禁止訪問via off forwarded_for delete log_mime_hdrs on header_access User-Agent allow all# 崩潰時 coredumps 目錄,建議保留默認coredump_dir /var/cache/squid# 設置 DNS 服務器dns_nameservers 8.8.8.8 208.67.222.222# 限制 Squid 的文件句柄數,Windows 有一定限制,不要改動max_filedescriptors 3200

請務必將所有中文註釋刪掉,然後將該配置文件保存爲 ANSI 文本文件,Squid 不支持 Unicode 配置文件。然後運行桌面上的 Squid Terminal 程序,執行 squid -z 初始化緩存目錄。如果出現類似

FATAL: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (17) File exists

這樣的錯誤,請到 Squid 安裝目錄,刪除 dev/shm/ 目錄下的所有文件再重新執行上述命令。

然後再 Start Squid Service,緩存代理服務器就應該架好了。

接下來在你的瀏覽器配置 HTTP 代理,感受一下緩存加速的效果吧。


推薦閱讀:

網路基本功(三十一):細說DHCP
進程間的通信方式:簡介
黑客伴侶2——tcpdump抓包
python3 爬取半次元cosplay圖片
一文看懂https如何保證數據傳輸的安全性的

TAG:計算機網路 | 網頁 |