求一个动态代理方案

2018-11-27 16:36:32 +08:00
 daijinming

求一个动态代理方案,基本需求是这样的,请求 / (根目录) 转发到 http://192.168.10.1:80 上, 请求 /app1 转发到 http://192.168.10.1:801,请求 /app2 转发到 http://192.168.10.1:802,这个需求其实使用 nginx 代理难度不大,我是考虑有个动态代理,转发规则存储在数据库中方便修改,不知道我的思路有没有问题?

1938 次点击
所在节点    程序员
9 条回复
buhi
2018-11-27 17:01:22 +08:00
写一个函数, 有人更新规则的时候, 把数据库的规则写到 nginx 配置文件, 然后执行 nginx -s reload
azh7138m
2018-11-27 17:04:28 +08:00
xkeyideal
2018-11-27 17:05:46 +08:00
动态加载生成 nginx.conf,需要自己做一个系统
ChoateYao
2018-11-27 17:31:47 +08:00
没有那么麻烦,我使用 Lua + redis + nginx 写了一个动态代理玩意。
用于第三方支付调试
mytry
2018-11-27 17:38:01 +08:00
用 nginx lua 几行代码就可以搞定~
daijinming
2018-11-27 17:53:35 +08:00
@ChoateYao @mytry 不只有什么资料或应用代码什么的可以借鉴一下,lua 也就是听过
linxiaojialin
2018-11-27 18:16:33 +08:00
1.将代理规则放在一个指定的目录或固定名称的配置文件中;
2.nginx 主机配置引入该目录或该文件;
3.每次更新数据库中的规则时,删除该目录下的所有文件并生成新的配置文件或覆盖该文件,最后调用函数执行"service nginx reload"或"nginx -s reload"(也可以将新的规则放进队列,建议由其它进程去重载 nginx 配置);

不知道 LZ 会哪些语言,我以 PHP 为例吧,其它语言也差不多。
在 PHP 中可以使用 unlink 函数删除文件,使用 file_put_contents、fopen 等函数写入文件,使用 exec、system 等函数执行系统命令,注意原目录或原文件的权限,建议用 CLI 模式执行。
catinred
2018-11-27 18:27:13 +08:00
可以试试 traefik
PorUnaCabeza
2018-11-28 10:20:36 +08:00
Openresty

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX