关于 nginx 做 tcp 反代的域名解析设置

2022-11-20 09:54:28 +08:00
 manfred4527

关于 nginx 做 tcp 反代的域名解析设置

现在通过 nginx stream 模块做 tcp 反向代理

stream {

  upstream example-ser{
        server example.com:1234;
  }


  server {
      listen 1234;
      proxy_connect_timeout 10s;
      proxy_timeout 10s;
      proxy_pass example-ser;
  }


}

如果 example.com 的地址解析出现变化,nginx 还是转发到原先的 IP 地址。

在 stream 模块内使用 set 提示报错

stream {  
	resolver 223.5.5.5 valid=60s;
  set $example-ser example.com:1234;
  
    server {
      listen 1234;
      proxy_connect_timeout 10s;
      proxy_timeout 10s;
      proxy_pass $example-ser;
  }
}

#报错
nginx[21518]: nginx: [emerg] "set" directive is not allowed here in

HTTP 或 HTTPS 我都是使用 resolver 加 set 变量方法做的,tcp 四层现在不知道怎么配置。

求解答,谢谢

1378 次点击
所在节点    问与答
5 条回复
cpstar
2022-11-20 10:56:51 +08:00
https://cloud.tencent.com/developer/article/1888426 ,善用搜索引擎:nginx resolver upstream
似乎 upstream 和 resolver 没有良好解。
eason1874
2022-11-20 11:15:33 +08:00
set 只能在 server, location, if 区域使用,map 可以在 stream 使用,可以用 map 代替
ryd994
2022-11-20 13:20:28 +08:00
无解。文档写的很清楚:域名只在读取配置文件时解析,运行时只用 IP
你可以自己写个脚本监控 nslookup 结果,如果有变化就给 Nginx 发信号 reload

@eason1874 set 往下移动两行就是 server 区了
manfred4527
2022-11-22 09:20:31 +08:00
@eason1874 MAP 测试过也不行,不报错,但是不会改连接的 IP
manfred4527
2022-11-22 09:21:24 +08:00
@ryd994 看来只能按这个思路解决问题

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

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

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

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

© 2021 V2EX