前端開發往往需要在本地調試環境和線上環境之間靈活切換,以將要調試的一個頁面為例,頁面引用了如下的靜態資源,要想在本地開發調試下面引入的js代碼,最直接的方法是在把引入的資源路徑改成本地調試路徑,並起一個本地服務器訪問頁面,使用這種方法最大的缺點就是上線前需要恢復原來的引入路徑,再或者我們沒有權限修改頁面代碼,上述方法也無法使用。因此代理的方式才是首選。
<script type="text/javascript" src="//q.qunarzz.com/flight_tejia/prd/scripts/app.js"></script>
Mac上常用兩種代理工具:Nginx和Charles,下面介紹這兩種工具的配置方法。
配置Nginx代理
第一步:配置host使請求打到本地
127.0.0.1 q.qunarzz.com
為了方便配置host,推薦使用SwitchHosts軟件

第二步:配置nginx
nginx基本命令
sudo nginx #第一次啟動nginx
sudo nginx -s reload #重新啟動nginx
sudo nginx -s stop #關閉nginx
以支持https請求為例,瀏覽器或者模擬器訪問頁面https://q.qunarzz.com:443/xxxxx
,域名解析host生效—>127.0.0.1:443/xxxx
,使用nginx的proxy_pass代理到本地端口如3000
因此會將請求打到本地服務,對於的nginx配置如下,對於https需要安裝證書文件,可以參考如何為nginx配置https(免費證書)
server{
listen 80;
listen 443 ssl;
#監聽的域名
server_name qunarzz.com q.qunarzz.com my.qunar.com mobileqzz.beta.qunar.com;
expires -1;
ssl_certificate /usr/local/etc/nginx/cert/xxx.crt;
ssl_certificate_key /usr/local/etc/nginx/cert/xxxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ /(flight_tejia)/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置Charles代理
個人喜歡使用Charles代理,圖形化的界面便於發現代理錯誤和集中管理常用代理,上面的代理也可以使用Charles配置,而且不需要單獨配置host。
第一步:開啟Charles的SSL proxy
開啟Charles,點擊頂部菜單欄的Proxy--SSL Proxying Settings,打開設置頁面。點擊add按鈕,可以對制定的Host和Port進行SSL Proxy,如果想對所有的Host進行SSL代理,在Host輸入框里填*,在Port框里填443,這樣可以代理所有域名或ip。最后點擊Enable SSL Proxying,生效設置。

第二步:終端連代理,安裝Charles的證書
保證終端和電腦在同一個局域網內,比如手機和電腦都連同一個熱點,或者電腦開共享熱點,手機連這個熱點。模擬器就不需要了。在手機的WLAN設置里,選擇熱點-修改網絡或者高級設置-代理-手動,輸入電腦的局域網IP,端口號是8888。這個8888是Charles的默認端口號。連接成功后,在手機瀏覽器里輸入http://charlesproxy.com/getssl
,點回車。會自動下載彈窗提示安裝charles的ssl證書,安裝即可。

補充說明在手機或者模擬器上要設置信任證書,設置->通用->關於手機-> 證書信任設置
第三步:通過Map Remote實現https轉http
手機連上Charles的代理,發送網絡請求。第一次連Charles發請求時,Charles會彈窗提示是否允許該終端發網絡請求,一定要點是!。可以看到即使是https,也可以明文展示。以q.qunarzz.com
為例,找到q.qunarzz.com
的請求項,右擊,點擊Map Remote, 將https://q.qunarzz.com
映射到 http://q.qunar.com
,重新發請求即可。
最后還有一點需要注意,由於瀏覽器的安全策略,如果使用瀏覽器打開,可能會有如下錯誤,只需要繼續前往,然后刷新頁面就好了。