nginx路由轉發
location語法規則
location [=|~|~*|^~|@] /uri/ { ... } location分為兩個部分
[=|~|~*|^~|@] 第一個部分
= : 表示精確匹配后面的url
~ : 表示正則匹配,但是區分大小寫
~* : 正則匹配,不區分大小寫
^~ : 表示普通字符匹配,如果該選項匹配,只匹配該選項.不匹配別的選項,一般用來匹配目錄
@ : "@" 定義一個命名的 location,使用在內部定向時,例如 error_page
= 是精確完整匹配, 且優先級最高
正則匹配時,如果 ~ 和 ^~ 同時匹配規則,則 ^~ 優先
^~ 這個不會匹配請求url中后面的路徑, 如上面的 /test/hello 沒有匹配上
^~ 不支持正則,和=相比,范圍更廣, hellowo 是可以被^~匹配,但是 = 不會匹配
~ 路徑中只要包含就可以匹配,如上面的 /test/hellowo 返回了602
/uri/ 第二個部分
這里主要填的就是需要匹配的path路徑,根據前面的符號,這里可以填寫精確的path路徑.也可以填正則表達式,下面則主要針對正則進行說明
. : 匹配除換行符以外的任意字符
? : 重復0次或1次
+ : 重復1次或更多次
* : 重復0次或更多次
\d :匹配數字
^ : 匹配字符串的開始
$ : 匹配字符串的介紹
{n} : 重復n次
{n,} : 重復n次或更多次
[c] : 匹配單個字符c
[a-z] : 匹配a-z小寫字母的任意一個
小括號()之間匹配的內容,可以在后面通過$1來引用,$2表示的是前面第二個()里的內容.正則里面容易讓人困惑的是\轉義特殊字符。
rewrite規則
地址重寫和地址轉發的區別
地址重寫 是為了實現地址的標准化,比如我們可以在地址欄中中輸入 www.baidu.com. 我們也可以輸入 www.baidu.cn. 最后都會被重寫到 www.baidu.com 上.瀏覽器的地址欄也會顯示www.baidu.com
地址轉發:它是指在網絡數據傳輸過程中數據分組到達路由器或橋接器后,該設備通過檢查分組地址並將數據轉發到最近的局域網的過程
因此地址重寫和地址轉發有以下不同點:
1. 地址重寫會改變瀏覽器中的地址,使之變成重寫成瀏覽器最新的地址.而地址轉發他是不會改變瀏覽器的地址的
2. 地址重寫會產生兩次請求,而地址轉發只會有一次請求
3. 地址轉發一般發生在同一站點項目內部,而地址重寫且不受限制
4. 地址轉發的速度比地址重定向快
跨域配置主要是在開發時頁面域名(localhost)和接口域名(api.xxx.com)不一致導致的,通過nginx的location和proxy_pass.將指定請求代理到對應服務商,從瀏覽器的角度來看,請求的都是同一個域名,也就不存在跨域限制了.
rewrite會改變瀏覽器中的地址 而proxy_pass不會瀏覽器原來的地址
proxy_pass 最后不帶/ 出現資源訪問錯誤
proxy_pass最后帶/和不帶/ 是有區別的
Nginx反向代理集成Grafana實例
這樣就把其它主機上的grafana集成到自己的web服務器上
nginx配置websocket接口
wss協議是建立在websocket上面的ssl鏈接基於https協議 ws是websocket鏈接基於http協議。 如果系統走http,那么只能使用ws. 如果系統走https,那么只能使用wss
把所有js文件中出現的wss協議替換成ws協議

sed -i 's#e="wss://"+window.location.hostname+":8770/websocket/security/incident/"#e="ws://"+window.location.hostname+":8771/websocket/security/incident/"#' /app/taishi/nginx/html/static/js/chunk-*js sed -i 's#t="wss://"+window.location.hostname+":8770/websocket/incidentInfo/"#t="ws://"+window.location.hostname+":8771/websocket/incidentInfo/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#e="wss://"+window.location.hostname+":8770/websocket/home/seven_day"#e="ws://"+window.location.hostname+":8771/websocket/home/seven_day"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#e="wss://"+window.location.hostname+":8770/websocket/security/asset/"#e="ws://"+window.location.hostname+":8771/websocket/security/asset/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#e="wss://"+window.location.hostname+":8770/websocket/security/result/"#e="ws://"+window.location.hostname+":8771/websocket/security/result/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#a="wss://"+t+":1688/websocket/comp/attackMap/"#a="ws://"+t+":8771/websocket/comp/attackMap/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#r="wss://"+t+":1688/websocket/comp/situation/"#r="ws://"+t+":8771/websocket/comp/situation/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#e="wss://"+window.location.hostname+":1688/websocket/security/incident/"#e="ws://"+window.location.hostname+":8771/websocket/security/incident/"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#s="wss://"+location.hostname+":1688"#s="ws://"+location.hostname+":8771"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#r="wss://"+location.hostname+":1688"+e+"#r="ws://"+location.hostname+":8771"+e+"#' /app/taishi/nginx/html/static/js/chunk-*.js sed -i 's#r="wss://"+location.host+e+"?token="#r="ws://"+location.host+e+"?token="#' /app/taishi/nginx/html/static/js/chunk-*.js
nginx使用https代理grafana頁面
需求把grafana的頁面通過iframe嵌套到自己的web系統中,原來自身的web是通過http訪問
點擊菜單的時候直接向http://192.168.30.175:3000/d/rYdddlPWk-evan/sadan-ji-ban-jian-kong?orgId=1&refresh=1m發送請求即可
但是把第三方系統升級為https協議后,再次通過iframe嵌套http協議頁面的時候請求會被block掉
不方便把granfa的頁面由http升級為https
解決方案:
1.給grafana的web服務器添加一個自定義的根路徑
grafana頁面由http://localhost:3000自動變成http://localhost:3000/devops/monitor
2.修改nginx的配置文件
3.修改頁面菜單的請求地址
搭建完成.通過nginx的反向代理配置可以在一個系統中集成任何第三方系統的頁面進行統一展示