网站首页 > 技术教程 正文
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 项目部署到服务器的问题解决方法
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (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)
本文暂时没有评论,来添加一个吧(●'◡'●)