nginx 解析 consul 域名问题,求大佬?

169 天前
 goforwardv2

consul 用如下命令启动:
sudo docker run -d --name=consul -p 8500:8500 -p 8600:8600/udp -v /home/alex/code/consul-data:/consul/data consul:1.15.4

nginx.conf 配置如下:
stream {
resolver 192.168.1.125:8600 ipv6=off valid=30s;

upstream tcp_servers {  
    server my-service.service.consul:6789;  
}  

server {  
    listen 12345;  
    proxy_pass tcp_servers;  
    proxy_connect_timeout 1s;  
}  

}

后端的 TCP 服务器已经成功注册到 consul ,执行 dig @192.168.1.125 -p 8600 my-service.service.consul 是可以正确解析域名的,但是配置在 nginx 里面,就提示: nginx: [emerg] host not found in upstream "my-service.service.consul:6789" in /etc/nginx/nginx.conf:73
nginx: configuration file /etc/nginx/nginx.conf test failed

搞了一上午,怎么改配置都不行

1040 次点击
所在节点    程序员
14 条回复
guisheng
169 天前
容器异常或者不在同一个网络中
guisheng
169 天前
@guisheng 重启即可;前段时间遇到过 在同一个网络中 nginx 配置了未启动的容器就会这样报错
goforwardv2
169 天前
@guisheng nginx 和 consul docker 开在一台机器上也不行,同时 consul 已经用了--network host 也不行
guisheng
169 天前
@goforwardv2 consul 先启动,nginx 后启动。 指定了宿主机网络的话 你给 nginx -add host
F7TsdQL45E0jmoiG
169 天前
nginx 中指定 resolver
hehe5120
169 天前
6789 这个端口号好像不对吧。nginx 是在 docker 里面吗? 在 nginx 环境下 ping my-service.service.consul 的结果是什么?
goforwardv2
169 天前
@morenacl @hejiangyuan resolver 指定了,并且 nginx 是系统命令运行的
xoic
169 天前
nginx 版本?
goforwardv2
169 天前
@xoic nginx version: nginx/1.14.0 (Ubuntu)
chenuu
169 天前
nginx-plus 才支持 consul 吧
goforwardv2
169 天前
@chenuu 有可能啊,尝试了很多方法都无效,我试试 nginx-plus
chenuu
169 天前
开源的 nginx,对 consul 的话,你可以试试 consul-template 的方案,或者换掉 ng,使用 caddy 或者 traefik
guanzhangzhang
169 天前
看着是你 resolve 的层级不对,你自己抓包 53 看看是不是发往 8.8.8.8 了
xoic
169 天前
@goforwardv2 感觉版本不支持 resolver 带端口的写法

该指令出现在 1.17.5 版中。
配置用于将上游服务器的名称解析为地址的名称服务器,例如:
resolver 127.0.0.1 [::1]:5353 valid=30s;

文档是这么写的。

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

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

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

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

© 2021 V2EX