lua-upstream-nginx-module 的 get_upstreams 函数获取 upstream name 带端口

72 views
Skip to first unread message

xiaoxi

unread,
Mar 28, 2022, 10:21:07 PMMar 28
to openresty
大家好,再使用 lua-upstream-nginx-module 时候发现一个问题,
使用 lua-upstream-nginx-module 的 get_upstreams 函数获取 upstream name 有些带端口 80,有些却没有
在我们的线上环境,展示的 upstream name 大部分带有端口 80,少数没有带 端口 80,线上的 server port 为 80

我想请问这是怎么回事,以及怎么去掉端口

upstream test-online:80:
    1   addr = 10.18.75.163:1889, weight = 1, fail_timeout = 10, name = 10.18.75.163:1889, max_fails = 1
    2   addr = 10.18.96.47:1889, weight = 1, fail_timeout = 10, backup = true, name = 10.18.96.47:1889, max_fails = 1
       
   
upstream test-pool:
    1   addr = 10.18.38.32:8080, weight = 1, fail_timeout = 10, backup = true, name = 10.18.38.32:8080, max_fails = 1
    2   addr = 10.16.77.94:8080, weight = 1, fail_timeout = 10, name = 10.16.77.94:8080, max_fails = 1
       
但是在我的测试环境中,upstream name 都没有端口。
线上环境和测试环境版本都一样
nginx version: openresty/1.11.2.2

Junlong li

unread,
Mar 29, 2022, 6:17:33 AMMar 29
to openresty
这版本太老了。你应该用最新版本来看看是否可以重现,免得是已经解决过的 问题。

xiaoxi

unread,
Apr 1, 2022, 4:51:12 AMApr 1
to openresty
多谢回复!

线上Nginx 添加了很多其他模块和补丁,有些不兼容
不过看了一下 源码,有附带 port 的逻辑? 
static int
ngx_http_lua_upstream_get_upstreams(lua_State * L)
{
  
    ...
   
    for (i = 0; i < umcf->upstreams.nelts; i++) {

        uscf = uscfp[i];

        lua_pushlstring(L, (char *) uscf->host.data, uscf->host.len);
        if (uscf->port) {
            lua_pushfstring(L, ":%d", (int) uscf->port);
            lua_concat(L, 2);

            /* XXX maybe we should also take "default_port" into account
             * here? */
        }

        lua_rawseti(L, -2, i + 1);
    }

    ...
}

不太明白同样的配置下,有一些带 port 有的不带

Junlong li

unread,
Apr 8, 2022, 9:06:11 PMApr 8
to openresty
你最好整一个可以复现的最小化配置,不然都不好分析问题了。

Junlong li

unread,
Apr 8, 2022, 10:03:50 PMApr 8
to openresty
你的配置是proxy_pass  http://10.0.0.100

upstream backend {
  xxxx
}
还是 proxy_pass http://backend

前者会有端口,后者没有
Reply all
Reply to author
Forward
0 new messages