网站首页 > 技术教程 正文
nginx无疑是网关最稳定的选择,尝试过很多动态网关,但是最终都觉得那些太复杂臃肿,比如kong等,很难想象他们的实际使用场景,以及在实际使用中的意义,还是动手来改造nginx吧。
- 设计思路:
首先暂不考虑lua脚本,因为老胡希望,在最恶劣和最失误的情况,nginx仍然能保持大部分业务系统的正常运行,这也是微服务的设计初衷。我曾经有这样一个动态网关方案,eureka+gateway,然后遇到参数错误直接把eureka注册中心弄死机,然后gateway死机,那种全业务崩溃的感觉能感受吗?从那以后,我就坚信任何复杂的网关都不具有实用价值。
我采用动态生成nginx的conf配置文件的方案来实现动态网关,之前用java实现过一次动态生成conf文件,没有找到现成的开源包,自己虽然实现了,但是感觉不够灵活。这次决定使用node.js来做,没想到很快就找到了开源包 nginx-conf。
const NginxConfFile = require('nginx-conf').NginxConfFile;
// 需要提供tt.conf文件,或者创建空的 tt.conf文件
NginxConfFile.create('./tt.conf', (err, conf)=>{
// 清空 原文件的 server节点,upstream节点,这个根据实际需要
conf.nginx._remove('server')
conf.nginx._remove('upstream')
conf.nginx._add('server', null)
conf.nginx.server[0]._add('listen', 80)
conf.nginx.server[0]._add('server_name', '\tlocalhost')
conf.nginx.server[0]._add('client_max_body_size', '\t100m')
conf.nginx.server[0]._add('proxy_set_header', '\tHost\t$host')
conf.nginx.server[0]._add('proxy_set_header', '\tX-Real-IP\t$remote_addr')
conf.nginx.server[0]._add('proxy_set_header', '\tX-Forwarded-For\t$proxy_add_x_forwarded_for')
conf.nginx.server[0]._add('proxy_set_header', '\tX-Forwarded-Proto\t$scheme')
conf.nginx.server[0]._add('proxy_set_header', '\tX-Forwarded-Port\t$server_port')
// 创建一个新的 location, 路径为 /aaa/ 的访问,都指向 http://192.168.0.1:8080/aaa/
conf.nginx.server[0]._add('location', '/aaa/')
conf.nginx.server[0].location[i]._add('proxy_pass', 'http://192.168.0.1:8080/aaa/')
conf.on('flushed', () => {
console.log('finished writing to disk, exiting');
process.exit();
});
// 将对conf的修改,写入 配置文件
conf.flush()
})得到tt.conf配置文件,查看:
server {
listen 80;
server_name localhost;
client_max_body_size 100m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
location /aaa/ {
proxy_pass http://192.168.0.1:8080/aaa/;
}
}简单吧,再修改为从mysql数据库读取,就成为动态网关了。
- 异常
这种模式会出现哪些异常呢?第一是路径配置错误,那后果就是新配置的不能用,某一个老的配置路径被冲突了。这个破坏范围还算小吧? 第二个是 动态文件生成失败,那就继续使用原有的配置文件呗。 所以,可见这种做法的安全性是可以得到保障的。最重要的是不用学习nginx里面的配置在spring-gateway里面如何实现等等。
- 关注老胡,分享更多简洁有用的技巧
猜你喜欢
- 2024-10-11 Nginx自定义数据结构之字符串(String)数组(Array)链表(List)
- 2024-10-11 那些你不知道的?——支付宝架构师眼中的高并发架构
- 2024-10-11 脚本语言,node在前端都有什么作用?
- 2024-10-11 什么是Java开发人员的Node.js?(java node是什么)
- 2024-10-11 提高 kubernetes 集群管理工具 kubectl 使用生产力
- 2024-10-11 Docker 快速部署一个 node App(docker如何部署)
- 2024-10-11 基于阿里云的 Node.js 稳定性实践
- 2024-10-11 从静态到node再到负载均衡,你知道多少?【前端篇】
- 2024-10-11 高效管理 Kubernetes 集群之道(kubernetes集群应用部署的哪些功能)
- 2024-10-11 Vue 项目部署到服务器的问题解决方法
欢迎 你 发表评论:
- 12-16家用摄像头驱动程序(家用摄像头驱动程序是什么)
- 12-16科兴董事长被抓(科兴董事长被抓视频)
- 12-16无线密码破解用什么软件(无线密码破解软件哪个好)
- 12-16360路由器设置登录(360路由器登陆口)
- 12-16安全平台教育平台登录(安全平台教育登录账号入口)
- 12-16win7装机版系统(win7系统装机教程)
- 12-151500元以内最强笔记本(懂行的人建议买华为还是联想)
- 12-15电脑很卡怎么办快速解决方法
- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)