V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
zhoudaiyu
V2EX  ›  NGINX

Nginx 在同一 vhost 的同一 server 内,想代理完全相同的 url 的后端盖怎么做?

  •  
  •   zhoudaiyu ·
    PRO
    · Apr 20, 2021 · 2721 views
    This topic created in 1836 days ago, the information mentioned may be changed or developed.

    比如配置一个 server,监听了 443 端口,代理了 3 个 url 完全相同的后端(比如代理了 3 个 grafana:a 、b 、c ),因此我们想在访问 nginx 时 url 加上一个特别文根区分它们,比如 https://172.16.103.14/a/代表访问后端 a 的 grafana,以此类推。但是我们发现当我们加上这个标识后,比如请求 grafana 的 a 服务器会返回个重定向到 https://172.16.103.14/login,但是我们的 nginx 不能配上 /login 这个文根,因为三个后端是相同的,无论我访问 /a 、/b 还是 /c 都会重定向到 login,这样就没法区分到底应该访问哪个后端了。大家有啥办法吗?

    13 replies    2021-04-21 13:24:20 +08:00
    ch2
        1
    ch2  
       Apr 20, 2021
    你可以让 nginx 把 /a 、/b 、/c 裁剪掉,很基础的做法,就是在 /a 后面再加个 /就行了
    ```
    location /a/ {
    proxy_pass http://127.0.0.1;
    }
    ```
    selypan
        2
    selypan  
       Apr 20, 2021
    自己设置的重定向是没有办法的,除非你重定向也加上前缀
    最简单就是分配三个域名
    zhoudaiyu
        3
    zhoudaiyu  
    OP
    PRO
       Apr 20, 2021
    @ch2 #1 我们就这么配的,但是 grafana 会重定向到 nginx 的 /login,就没有前面的 /a 、/b 、/c 的文根了,我们如果配置了 /login 就不知道转到哪个后端的 grafana 了
    zhoudaiyu
        4
    zhoudaiyu  
    OP
    PRO
       Apr 20, 2021
    @selypan #2 不知道能不能在第一次访问 /a 、/b 、/c 的时候往 cookie 里面塞一些东西比如加上这个文根信息,跳转重定向的时候把 cookie 拿出来再做重定向
    chendy
        5
    chendy  
       Apr 20, 2021
    dzdh
        6
    dzdh  
       Apr 20, 2021
    请看 proxy_redirect 部分
    int64ago
        7
    int64ago  
       Apr 20, 2021
    这种需要服务配合,我看了下 Grafana 的配置,可以配置

    zhoudaiyu
        8
    zhoudaiyu  
    OP
    PRO
       Apr 20, 2021 via iPhone
    @chendy 🐮🍺 不过假如改不了还有别的办法吗?
    int64ago
        9
    int64ago  
       Apr 20, 2021
    @zhoudaiyu #8 那就只能分三个域名
    selypan
        10
    selypan  
       Apr 20, 2021
    买个域名几块钱呗
    jim9606
        11
    jim9606  
       Apr 20, 2021   ❤️ 1
    用 proxy_redirect,将 backend 响应的 Location 进行重写。

    https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
    akafeng
        12
    akafeng  
       Apr 20, 2021
    反代后替换下登录地址?
    zed1018
        13
    zed1018  
       Apr 21, 2021
    rewrite 不就好了吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2593 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 12:47 · PVG 20:47 · LAX 05:47 · JFK 08:47
    ♥ Do have faith in what you're doing.