Nohost基于 Whistle 的遠(yuǎn)程配置及抓包調(diào)試平臺(tái)
Nohost 是基于 Whistle 實(shí)現(xiàn)的多用戶多環(huán)境配置及抓包調(diào)試系統(tǒng),不僅具備 Whistle 的所有功能,并在 Whistle 基礎(chǔ)上擴(kuò)展了一些功能,且支持多人多環(huán)境同時(shí)使用,主要用于部署在公共服務(wù)器上供整個(gè)部門(公司)的同事共同使用,具有以下功能:
- 環(huán)境共享:前端無(wú)需配后臺(tái)環(huán)境,后臺(tái)無(wú)需配前端環(huán)境,其他人無(wú)需配任何環(huán)境
- 抓包調(diào)試:遠(yuǎn)程實(shí)時(shí)抓包調(diào)試,支持各種 Whistle 規(guī)則,以及通過鏈接分享抓包數(shù)據(jù)
- 歷史記錄:可以把環(huán)境配置及抓包數(shù)據(jù)沉淀下來(lái),供后續(xù)隨時(shí)切換查看
- 插件擴(kuò)展:可以通過插件擴(kuò)展實(shí)現(xiàn)諸如 inspect,vase,autosave 等功能
- 對(duì)外接口:提供對(duì)外接口,可供發(fā)布系統(tǒng)、CI等工具操作,實(shí)現(xiàn)自動(dòng)化增刪查改環(huán)境配置
目錄
一. 準(zhǔn)備
安裝 Nohost 之前,建議先做好以下工作:
- 準(zhǔn)備一臺(tái)服務(wù)器,假設(shè)IP為:10.1.2.3(以你自己的服務(wù)器為準(zhǔn),建議4核8G以上的配置)
- 準(zhǔn)備一個(gè)域名(以下假設(shè)為:nohost.imweb.io),并把 DNS 指向上述服務(wù)器(10.1.2.3)
- 收集涉及域名的證書對(duì),只支持
xxx.key和xxx.crt(非必須,但建議用正式的證書,否則要么 Nohost 里面無(wú)法查看 HTTPS 的內(nèi)容,要么每個(gè)訪問 Nohost 的客戶端都要安裝一遍根證書)
申請(qǐng)域名的好處是可以直接用域名訪問管理及賬號(hào)頁(yè)面,手機(jī)也可以通過域名設(shè)置代理訪問 Nohost,方便記憶及輸入
二. 安裝
首先,需要安裝Node(建議使用最新的LTS版本):Node
Node安裝成功后,通過npm安裝 nohost:
npm i -g @nohost/server --registry=https://r.npm.taobao.org
安裝完成后執(zhí)行啟動(dòng)命令:
n2 start
也可以啟動(dòng)時(shí)直接設(shè)置當(dāng)前 Nohost 服務(wù)到域名 n2 restart -o nohost.imweb.io Nohost 的默認(rèn)端口為 8080,如果需要自定義端口,可以通過 n2 restart -p 80 設(shè)置。 如果命令行提示沒有對(duì)應(yīng)命令,檢查下系統(tǒng)環(huán)境變量 PATH 配置,看看 Nohost 安裝后生成的命令所在目錄是否已添加到 PATH。
重啟 Nohost:
n2 restart
停止 Nohost:
n2 stop
重置管理員賬號(hào):
n2 restart --reset
三. 設(shè)置
安裝啟動(dòng)成功后,打開管理員頁(yè)面 http://10.1.2.3:8080/admin.html#system/administrator,輸入默認(rèn)用戶名(admin)和密碼(123456),打開系統(tǒng)配置后:
其中 10.1.2.3 表示Nohost運(yùn)行的服務(wù)器IP,具體根據(jù)實(shí)際 ServerIP 替換
- 修改管理員的默認(rèn)賬號(hào)名和密碼(不建議使用默認(rèn)賬號(hào)及密碼,如果忘記管理員賬號(hào)名或密碼,可以通過
n2 restart --reset重置) - 設(shè)置Nohost的域名(將申請(qǐng)的域名填上,如果需要設(shè)置多個(gè)域名,可以通過逗號(hào)
,分隔,也可以通過啟動(dòng)參數(shù)-o www.xxx.com,www.yyy.com設(shè)置) - 上傳涉及的 key 和證書(證書只支持
.crt格式)
Note: 設(shè)置的域名 DNS 一定要指向該IP,否則可能出現(xiàn)不可用狀態(tài),上述配置會(huì)自動(dòng)重啟服務(wù),建議避免頻繁操作
四. 訪問
Nohost 本身就是一個(gè)代理,可以直接配置瀏覽器或系統(tǒng)代理訪問,也可以通過 Nginx反向代理訪問,為方便大家使用,針對(duì)不同的人群可以使用不同的方案(以下用 nohost.imweb.io 表示 Nohost 的域名,具體域名需要自己申請(qǐng)及設(shè)置)。
前端開發(fā)
前端開發(fā)建議使用最新版的 Whistle,可以通過以下兩種方式訪問 Nohost:
-
直接在 Whistle 上配置遠(yuǎn)程規(guī)則
@http://nohost.imweb.io:8080/whistle.nohost/cgi-bin/plugin-rules上述配置表示 Whistle 從
http://nohost.imweb.io:8080/whistle.nohost/cgi-bin/plugin-rules獲取 Nohost 的生成的入口規(guī)則,并且如果 Nohost 規(guī)則有變會(huì)自動(dòng)更新規(guī)則,這些規(guī)則是由 Nohost 上傳證書的域名及界面配置/入口配置配置的規(guī)則自動(dòng)生成(具體參見后面的配置),這些規(guī)則可以自動(dòng)過濾掉無(wú)關(guān)請(qǐng)求,只會(huì)把相關(guān)的請(qǐng)求轉(zhuǎn)到Nohost。當(dāng)然這種直接手動(dòng)配置在 Whistle 上還不是最好的方式,更建議的方式是把這些規(guī)則集成到插件里面,這樣開發(fā)者只需安裝插件即可。
-
【強(qiáng)烈推薦】 集成 Whistle 插件,具體參考:https://github.com/nohosts/whistle.nohost-imweb/blob/master/dev.md
后臺(tái)開發(fā)
后臺(tái)開發(fā)推薦使用 Chrome 的 SwitchyOmega 配置代理規(guī)則 (如上述代理配置 nohost.imweb.io + 8080),如果不想所有請(qǐng)求都轉(zhuǎn)到 Nohost,可以配置 SwitchyOmega 的自動(dòng)切換或者用PAC腳本代替,也可以參考 nohost-client 打包一個(gè)客戶端:https://github.com/nohosts/client。手機(jī)端可以直接配代理,或者通過 VPN App 設(shè)置代理,如 iPhone 可以用 detour。
其他人員
非開發(fā)人員盡量使用客戶端、APP、或通過外網(wǎng)轉(zhuǎn)發(fā)的方式,減少他們的接入成本,如何打包客戶端參考:https://github.com/nohosts/client;手機(jī)等同后臺(tái)開發(fā)的配置方式。
外網(wǎng)訪問
一般 Nohost 是部署在公司內(nèi)網(wǎng),外網(wǎng)是不可以直接訪問,需要通過接入層(如:Nginx)轉(zhuǎn)發(fā)。
五. 賬號(hào)
安裝好插件或配置好代理后,打開相關(guān)頁(yè)面(這些頁(yè)面的域名必須在上面上傳證書里面,如果沒有需要額外配置,具體參考下方 配置 說明),即可看到頁(yè)面左下腳出現(xiàn)一個(gè)小圓點(diǎn),點(diǎn)擊小圓點(diǎn)可以進(jìn)行切換環(huán)境:
如果頁(yè)面左下腳沒出現(xiàn)小圓點(diǎn),可以看下面 配置 說明 第一次打開小圓點(diǎn)只有一個(gè) 正式環(huán)境,需要管理員添加賬號(hào):
添加完賬號(hào)后,打開獨(dú)立的環(huán)境選擇頁(yè)面 http://nohost.imweb.io:8080:
創(chuàng)建完環(huán)境后,可以在環(huán)境里面配置任何 Whistle 規(guī)則,跟普通到本地 Whistle 功能一模一樣,甚至更多。每個(gè)實(shí)例可以建立上百個(gè)賬號(hào),每個(gè)賬號(hào)可以建立上百個(gè)環(huán)境,具體取決于你到機(jī)器性能。
六. 配置
默認(rèn)情況下,只有證書里面域名的請(qǐng)求才會(huì)被轉(zhuǎn)發(fā)到各個(gè)賬號(hào),且 html 類型的內(nèi)容會(huì)自動(dòng)注入小圓點(diǎn),但在實(shí)際應(yīng)用中你可能會(huì)遇到以下問題:
域名證書問題
有些域名只涉及 http 請(qǐng)求,不涉及 https 的請(qǐng)求不需要證書,或者某些敏感及第三方域名無(wú)法獲得證書,這類域名可以通過在 配置 -> 入口配置 里面設(shè)置:
入口配置的規(guī)則有三種(#xxx表示注釋):
pattern #轉(zhuǎn)發(fā)到Nohost,如果是html頁(yè)面則注入小圓點(diǎn)
-pattern #轉(zhuǎn)發(fā)到Nohost,不注入小圓點(diǎn)
--pattern #不轉(zhuǎn)發(fā)到Nohost,且不注入小圓點(diǎn)
x)-pattern #x為整數(shù)(正負(fù)數(shù)零都可以),表示手動(dòng)設(shè)置優(yōu)先級(jí),默認(rèn)為0
pattern 參見:https://wproxy.org/whistle/pattern.html,匹配順序是從上到下,每個(gè)請(qǐng)求只會(huì)匹配其中一個(gè),證書里面到域名優(yōu)先級(jí)默認(rèn)最低,可以通過 1) 設(shè)置優(yōu)先級(jí)。
如:
ke.qq.com
-*.url.cn
--localhost.**
-1)**.qq.com
表示:
- 所有
ke.qq.com的請(qǐng)求都轉(zhuǎn)發(fā)到Nohost,且所有 html 都注入小圓點(diǎn) - 所有
xxx.url.cn的請(qǐng)求都轉(zhuǎn)發(fā)到Nohost,但不注入小圓點(diǎn) - 所有
localhost.xxx.yyy...的請(qǐng)求都不轉(zhuǎn)發(fā)到Nohost,且不注入小圓點(diǎn) - 所有
qq.com的子代域名請(qǐng)求都轉(zhuǎn)發(fā)到Nohost,但不注入小圓點(diǎn),并優(yōu)先級(jí)設(shè)為-1,確保證書里面的qq.com子域名可以正常注入小圓點(diǎn)
七. 規(guī)則
這個(gè)是 Nohost 主進(jìn)程 Whistle,所有請(qǐng)求都會(huì)通過該 Whistle,并通過該進(jìn)程的 whistle.nohost 插件進(jìn)行賬號(hào)管理及請(qǐng)求轉(zhuǎn)發(fā),主進(jìn)程 Whistle 在生產(chǎn)環(huán)境下無(wú)法查看抓包數(shù)據(jù),可用于設(shè)置規(guī)則及全局插件管理,如:屏蔽一些請(qǐng)求等等,更多內(nèi)容參見后面的文檔。
詳細(xì)內(nèi)容參見文檔:https://nohost.pro/
