关于 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 四层现在不知道怎么配置。
求解答,谢谢
1
cpstar 2022-11-20 10:56:51 +08:00
https://cloud.tencent.com/developer/article/1888426 ,善用搜索引擎:nginx resolver upstream
似乎 upstream 和 resolver 没有良好解。 |
2
eason1874 2022-11-20 11:15:33 +08:00
set 只能在 server, location, if 区域使用,map 可以在 stream 使用,可以用 map 代替
|
3
ryd994 2022-11-20 13:20:28 +08:00 via Android
无解。文档写的很清楚:域名只在读取配置文件时解析,运行时只用 IP
你可以自己写个脚本监控 nslookup 结果,如果有变化就给 Nginx 发信号 reload @eason1874 set 往下移动两行就是 server 区了 |
4
manfred4527 OP @eason1874 MAP 测试过也不行,不报错,但是不会改连接的 IP
|
5
manfred4527 OP @ryd994 看来只能按这个思路解决问题
|