nginx 一个 location 能实现三个 proxy_pass 吗

2021-07-02 11:42:06 +08:00
 liuzh365
新手,我想在 nginx 配置上实现一种情况:一个 location 能实现三个 proxy_pass,匹配到第一个就转发第一个,不行就匹配第二个。。。
但是能搜到的实现方式 https://blog.csdn.net/liuxiao723846/article/details/83147792
要么是根据路径的字符串拼接来 if else,要么就是根据 url 后面的参数来区分=_=。但是参数和 url 这两种方式,以目前的场景暂时实现不了。
2907 次点击
所在节点    NGINX
15 条回复
dier
2021-07-02 11:47:37 +08:00
你这三个 proxy 是一样的吗?
如果是就用 upstream
如果不就是用多个 location 或 if 来判断
liuzh365
2021-07-02 11:48:17 +08:00
类似于
location / {
// 某种逻辑判断第一个
proxy_pass http://192.168.1.1
// 不行就第二个
proxy_pass http://10.10.1.1
// 不行继续往下
。。。
}

目前路径已经确定了不方便改动,然后暂时也没有加参数的打算
liuzh365
2021-07-02 11:48:44 +08:00
@dier 不一样的,我去看看怎么用
cpstar
2021-07-02 11:52:10 +08:00
如果 uri 或者参数场景都不能实现。那你靠什么实现 if-else 呢?
cpstar
2021-07-02 11:53:05 +08:00
如果仅是 2#所述的根据服务器状态来执行,那还是得用 upstream,这就是负载均衡的概念了,而不是仅仅为反代
liuzh365
2021-07-02 11:53:27 +08:00
@cpstar 我就是不知道,也查不到别的资料,才问问大伙=_+
dier
2021-07-02 12:06:20 +08:00
我尝试理解一下你的意思
访问 a.d.com/htmla.d.com/api 这个 html 跟 api 对应分别对应在 proxy1 和 proxy2 proxy3 上(三者提供服务不相同)?
如果是这样,要么用多 location 要么就是 if 来判断
cpstar
2021-07-02 12:07:12 +08:00
@liuzh336 6# 你想干啥你不知道么?
看样子像是根据服务器的服务器状态来一级一级反代,而不是根据用户请求条件分流。
你给的案例,是根据用户请求来判定反代去向。所以跟你的期望应该不一致。
lscho
2021-07-02 12:09:34 +08:00
你说的这个不就是负载均衡吗。。。upstream 可以判断服务器是否正常。
greenskinmonster
2021-07-02 12:52:27 +08:00
用 try_files 应该可以
i.imgur.com/McIFG23.png
cnoder
2021-07-02 13:17:58 +08:00
openresty 是可以
zw1027
2021-07-02 14:35:37 +08:00
实现不了就上 lua 自己写逻辑
maxbon
2021-07-02 14:50:47 +08:00
用变量判断试试,不确定可不可行,比如
if ( xxx ) {
set $a 192.168.1.1;
}
if ( yyy ) {
set $a 192.168.1.2;
}
proxy_pass http://$a;
ryd994
2021-07-03 05:18:42 +08:00
翻译翻译,什么叫“某种逻辑”?什么叫“匹配”?
dorothyREN
2021-07-03 12:55:14 +08:00
写三个一样的 location proxypass 不同就行了吧,这个是按顺序匹配的

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

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

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

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

© 2021 V2EX