安全預(yù)警:最近的 xcode ghost 事件讓大家的安全意識提高了不少剩胁。本文介紹的方法可能存在一些安全隱患。當(dāng)然森缠,解決方案也是有的祝闻,就是可以把本地 cdn 加速的文件和官網(wǎng)發(fā)布的正式版本做 md5 檢驗,這樣確保本地文件沒有被修改甘苍。由于時間緊迫尝蠕,目前還沒有實現(xiàn) md5 檢驗。請自己負(fù)責(zé)你的計算機安全载庭。
問題
訪問 StackOverflow 時奇慢無比有沒有看彼?其實原因不是因為 StackOverflow 不能訪問,而是因為 StackOverflow 網(wǎng)站引用了 Google 的 CDN 加速服務(wù)器來下載 jqeury 腳本囚聚。知乎上有個話題討論了這個問題靖榕。
解決方案
在本地搭建一個 web 服務(wù)器透敌,然后下載好 jquery 腳本锤岸,放在本地 web 服務(wù)器上。再修改 hosts 文件启绰,把 ajax.googleapis.com 重定向到本地 127.0.0.1 跋破。這樣瀏覽器就會從本地下載腳本簸淀,而不再從 ajax.googleapis.com 下載了。
詳細(xì)步驟
這里將介紹詳細(xì)的安裝和配置過程毒返,需要注意的是所有的目錄和命令以我的 mac 下的環(huán)境為例租幕。如果你用的是不同的版本或不同的操作系統(tǒng),根據(jù)你的情況完成相應(yīng)的配置即可拧簸。
安裝 nginx 服務(wù)器
網(wǎng)上一堆教程劲绪,搜索一下就可以成功安裝,需要注意的是兩點盆赤。一是需要設(shè)置 nginx 開機啟動贾富。二是需要修改 nginx 運行權(quán)限,因為我們要在 80 端口提供服務(wù)牺六,80 端口需要 root 權(quán)限才可以颤枪。
設(shè)置 nginx 開機啟動
把下面文件內(nèi)容保存到 /Library/LaunchAgents/com.nginx.plist
。然后運行 launchctl load -w /Library/LaunchAgents/com.nginx.plist
淑际。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.nginx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/nginx/bin/nginx</string>
<string>-g</string>
<string>daemon off;</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/nginx/error.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/nginx/access.log</string>
</dict>
</plist>
修改 nginx 運行權(quán)限
sudo chown root:admin /usr/local/Cellar/nginx/1.8.0/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.8.0/bin/nginx
配置 nginx 服務(wù)器
配置 nginx 服務(wù)器主要分兩步畏纲。一是生成 ssl 證書扇住,用來提供 https 服務(wù)。二是下載 local-cdn 到本地盗胀,將配置 nginx 指向這個本地目錄以便提供 cdn 服務(wù)艘蹋。
生成 ssl 證書
我們本地 cdn 還需要支持 ssl,所以需要做一個自簽名的證書票灰。下面命令會在 /usr/local/etc/nginx/ssl/
目錄下生成一個自簽名的證書女阀。這個證書后面會用到。
mkdir -p /usr/local/etc/nginx/ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /usr/local/etc/nginx/ssl/nginx.key -out /usr/local/etc/nginx/ssl/nginx.crt
配置 nginx 服務(wù)器
把 local-cdn 下載到本地屑迂,比如放在 /Users/kamidox/work/local-cdn
浸策。
cd /Users/kamidox/work/
git clone https://github.com/kamidox/local-cdn.git
然后配置 nginx 添加這個目錄當(dāng)作內(nèi)容目錄。我們把下面內(nèi)容保存到 /usr/local/etc/nginx/servers/local-cdn.conf
屈糊。注意配置中用到了我們上面生成的證書的榛。另外琼了,nginx 默認(rèn)會 include /usr/local/etc/nginx/servers/
下的所有配置文件逻锐。如果你修改過 nginx 的默認(rèn)配置,根據(jù)你自己的情況配置即可雕薪。
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
charset utf-8;
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/etc/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/nginx.key;
location / {
root /Users/kamidox/work/local-cdn/;
index index.html index.htm;
}
}
Contribution
歡迎大家提 pull request昧诱,一起完善科學(xué)文明的上網(wǎng)環(huán)境。