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

2021-04-20 21:25:01 +08:00
 zhoudaiyu

比如配置一个 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,这样就没法区分到底应该访问哪个后端了。大家有啥办法吗?

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

zhoudaiyu
2021-04-20 21:38:20 +08:00
@chendy 🐮🍺 不过假如改不了还有别的办法吗?
int64ago
2021-04-20 21:39:19 +08:00
@zhoudaiyu #8 那就只能分三个域名
selypan
2021-04-20 21:57:48 +08:00
买个域名几块钱呗
jim9606
2021-04-20 22:06:49 +08:00
用 proxy_redirect,将 backend 响应的 Location 进行重写。

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
chinafeng
2021-04-20 22:09:11 +08:00
反代后替换下登录地址?
zed1018
2021-04-21 13:24:20 +08:00
rewrite 不就好了吗

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

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

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

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

© 2021 V2EX