V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
zhoudaiyu
V2EX  ›  NGINX

有没有支持这种功能的代理或者自己实现有什么好的方法?

  •  
  •   zhoudaiyu · 2021-05-18 18:42:54 +08:00 · 1577 次点击
    这是一个创建于 1292 天前的主题,其中的信息可能已经有所发展或是发生改变。


    比如有一个代理 117.114.58.53 ,它反向代理后一些后端服务,且只能启动一个端口 80,后端服务有 4 层的有 7 层的,但是就 7 层代理而言,需要后端 url 不同,这样才能区分,比如有两个被代理服务 A 和 B 文根都是 /api/nginx,这样代理就没法区分到底转发给谁了,我想了一个思路,就是在文根前加一个标识,比如 A 的变为 /A/api/nginx,/B/api/nginx,这样 nginx 就可以区分了,但是后端服务很多不支持这样修改 url 会返回 404 或者 301 302 这种,而且还有很多重定向什么的也会修改 url 。

    所以想代理这块有没有能支持这种需求的,在不修改后端配置或者代码情况下,能处理这种自定义文根映射和处理重定向的。如果没有的话自己实现有什么可以借鉴的吗?

    3 条回复    2021-05-18 21:48:37 +08:00
    ch2
        1
    ch2  
       2021-05-18 18:48:56 +08:00
    "但是后端服务很多不支持这样修改 url"
    nginx 可以 rewrite 那个 url,在转发的时候把 /A/跟 /B/给去掉
    keyword233
        2
    keyword233  
       2021-05-18 21:43:05 +08:00
    nginx 就可以做到
    举个例子

    ```
    server
    {
    listen 80;
    location /A/example_api/ {
    http://10.0.0.1:80/example_api/;
    proxy_set_header Host $host:$server_port;
    }
    location /B/example_api/ {
    http://10.0.0.2:80/example_api/;
    proxy_set_header Host $host:$server_port;
    }
    }
    ```
    oneisall8955
        3
    oneisall8955  
       2021-05-18 21:48:37 +08:00 via Android
    看着像网关,springcloud-gateway 的感觉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:25 · PVG 07:25 · LAX 15:25 · JFK 18:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.