VeryNginx
VeryNginx 是一個功能強大而對人類友好的 Nginx 擴展程序.
提示
v0.2` 版本之后,控制台入口被移動到了 `/verynginx/index.html
中文控制台入口被移動到了 `/verynginx/index_zh.html
介紹
VeryNginx 基於 lua_nginx_module(openrestry)
開發,實現了高級的防火牆、訪問統計和其他的一些功能。 集成在 Nginx 中運行,擴展了 Nginx 本身的功能,並提供了友好的 Web 交互界面。
用戶名 / 密碼: verynginx / verynginx
詳細配置說明見:VeryNginx Github WiKi
Nginx 運行狀態分析
- 每秒請求數
- 響應時間
- 網絡流量
- 網絡連接數
自定義行為
VeryNginx 包含強大的自定義功能,可以做很多事情
自定義行為包含兩部分, Matcher 和 Action 。 Matcher 用來對請求進行匹配, Action 為要執行的動作
這樣的優勢在於把所有的前置判斷整合在Matcher里一起來實現了,使復雜(組合)規則的實現變成了可能
Matcher
一個 Matcher 用來判斷一個 Http 請求是否符合指定的條件, 一個 Matcher 可以包含一個或者多個約束條件,目前支持以下幾種約束:
- Client IP
- Host
- UserAgent
- URI
- Referer
- Request Args
當一個請求沒有違反 Matcher 中包含的全部條件時,即命中了這個 Matcher
Action
每個 Action 會引用一個 Matcher ,當 Matcher 命中時, Action 會被執行
目前已經實現了以下 Action
- Scheme Lock 將訪問協議鎖定為 Https 或者 Http
- Redirect 對請求進行重定向
- URI Rewrite 對請求的 URI 進行內部重寫
- Browser Verify 通過set-cookies 和 js 驗證客戶端是否為瀏覽器,並攔截非瀏覽器流量。本功能可能會阻攔搜索引擎爬蟲,建議僅在被攻擊時開啟,或者針對搜索引擎編寫特別的規則。
- Frequency Limit 訪問頻率限制
- Filter(waf) 過濾器
因為 Matcher 可以對請求進行細致的匹配,所以結合 Filter Action,就可以實現一個高級的WAF,可以利用Matcher中所有的條件來對請求進行過濾,並返回指定狀態碼
VeryNginx 預置了常用的過濾規則,可以在一定程度上阻止常見的 SQL 注入、Git 及 SVN 文件泄露、目錄遍歷攻擊,並攔截常見的掃描工具。
Backend
每個 Backend 會引用一個 Matcher ,當 Matcher 命中時, 請求會通過 Backend 進行處理
目前已經實現了以下 Backend
- Proxy Pass 將請求反向代理到其它服務器
- Static File 使用本地文件處理請求
訪問統計
VeryNginx 可以統計網站每個URI的訪問情況,包括每個URI的:
- 總請求次數
- 各狀態碼次數
- 返回總字節數
- 每請求平均字節數
- 總響應時間
- 平均響應時間
並且可以按各種規則排序進行分析。
安裝和使用說明
VeryNginx 基於 OpenResty[^openresty],所以安裝 VeryNginx 需要先安裝好 OpenResty。不過並不用擔心安裝過程中可能的麻煩,VeryNginx 自身提供了腳本來進行安裝工作。
安裝 VeryNginx
克隆 VeryNginx 倉庫到本地, 然后進入倉庫目錄,執行以下命令
python install.py install
即可一鍵安裝 VeryNginx 和 以及依賴的 OpenResty
想使用自己的 Nginx?
VeryNginx 可以自動為你安裝依賴的 OpenResty,通常情況下你沒有必要再自己安裝 OpenResty。
但如果你想要使用自己編譯的 Nginx( OpenResty ),也是可以的。具體方法請閱讀Wiki中的這篇說明:Use own nginx
使用
編輯 Nginx 配置文件
VeryNginx 的配置文件位置為 /opt/verynginx/openresty/nginx/conf/nginx.conf,這是一個簡單的示例文件,可以讓你訪問到 VeryNginx的控制面板。如果你想真正的用 VeryNginx 來做點什么,那你需要編輯這個文件,並將自己的 Nginx 配置加入到其中。
這個配置文件在普通的 Nginx 配置文件基礎上添加了三條 Include 指令來實現功能,分別為
- include /opt/verynginx/verynginx/nginx_conf/in_external.conf;
- include /opt/verynginx/verynginx/nginx_conf/in_http_block.conf;
- include /opt/verynginx/verynginx/nginx_conf/in_server_block.conf;
以上三條指令分別放在 http 配置塊外部,http 配置塊內部,server 配置塊內部,在修改時請保留這三條。如果添加了新的 Server 配置塊或 http 配置塊,也需要在新的塊內部加入對應的 include 行。
啟動/停止/重啟 服務
完成安裝工作以后,可以通過以下命令來運行 VeryNginx
#啟動服務
/opt/verynginx/openresty/nginx/sbin/nginx
#停止服務
/opt/verynginx/openresty/nginx/sbin/nginx -s stop
#重啟服務
/opt/verynginx/openresty/nginx/sbin/nginx -s reload
通過web面板對 VeryNginx 進行配置
VeryNginx 啟動后,可以通過瀏覽器訪問管理面板來查看狀態以及進行配置。
管理面板地址為 http://{{your_machine_address}}/verynginx/index.html
。
默認用戶名和密碼是 verynginx
/ verynginx
。
登錄之后就可以查看狀態,並對配置進行修改了。修改配置后,點擊保存才會生效.
故障排除
如果你在 安裝 / 配置 / 使用 的過程中遇到任何問題, 你可以參考故障排除文檔來解決.
詳細的配置說明
VeryNginx 按照易於使用的思想進行設計,如果你有一定的基礎,或是對 Nginx 較了解,那么你應該可以直接在界面上使用。
當然 VeryNginx 也提供了詳細的文檔供你查閱。 VeryNginx Wiki
提示
- 通過 VeryNginx 控制面板保存新配置之后,會立刻生效,並不需要 restart/reload Nginx。
- VeryNginx 把配置保存在
/opt/verynginx/verynginx/configs/config.json
里面。 - 狀態頁面圖表默認帶有動畫效果,如果有卡頓,可以點右上角齒輪圖標關掉動畫效果
- 如果因為配錯了什么選項,導致無法登錄,可以手動刪除
config.json
來清空配置,或者手動編輯這個文件來修復。
更新 VeryNginx / OpenResty
隨着時間的發展,VeryNginx 本身的代碼會演進,也可以會支持更新版本的 OpenResty ,更新的代碼可能會支持一些新的功能,或是修復了一些舊的bug。如果要更新本地已經安裝的 VeryNginx ,你只需要先 pull github 上最新的代碼到本地,然后通過以下命令來進行更新:
#更新 Verynginx
python install.py update verynginx
#更新 OpenResty
python install.py update openresty
install.py腳本在升級過程中,將保留原有的 config.json 和 nginx.conf, 所以更新的過程並不會丟失配置
構建VeryNginx docker 鏡像
在將代碼clone到本地之后,你可以運行下面的命令:
cd VeryNginx
docker build -t verynginx .
docker run -d --name=verynginx -p 8080:80 verynginx
然后用瀏覽器打開 http://{{your_docker_machine_address}}/verynginx/index.html
當然你也可以運行 docker run -d --name=verynginx -p xxxx:80 verynginx
來映射一下你的container的端口到你的宿主機,默認是80,你可以把xxxx改成你希望的在宿主機上的端口號