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的反向代理配置可以在一个系统中集成任何第三方系统的页面进行统一展示