V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

求一个动态代理方案

  •  
  •   daijinming · 2018-11-27 16:36:32 +08:00 · 2055 次点击
    这是一个创建于 2213 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2018-11-28 10:20:36 +08:00
    buhi
        1
    buhi  
       2018-11-27 17:01:22 +08:00
    写一个函数, 有人更新规则的时候, 把数据库的规则写到 nginx 配置文件, 然后执行 nginx -s reload
    azh7138m
        2
    azh7138m  
       2018-11-27 17:04:28 +08:00
    xkeyideal
        3
    xkeyideal  
       2018-11-27 17:05:46 +08:00
    动态加载生成 nginx.conf,需要自己做一个系统
    ChoateYao
        4
    ChoateYao  
       2018-11-27 17:31:47 +08:00
    没有那么麻烦,我使用 Lua + redis + nginx 写了一个动态代理玩意。
    用于第三方支付调试
    mytry
        5
    mytry  
       2018-11-27 17:38:01 +08:00
    用 nginx lua 几行代码就可以搞定~
    daijinming
        6
    daijinming  
    OP
       2018-11-27 17:53:35 +08:00
    @ChoateYao @mytry 不只有什么资料或应用代码什么的可以借鉴一下,lua 也就是听过
    linxiaojialin
        7
    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
        8
    catinred  
       2018-11-27 18:27:13 +08:00
    可以试试 traefik
    PorUnaCabeza
        9
    PorUnaCabeza  
       2018-11-28 10:20:36 +08:00
    Openresty
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1061 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.