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
搞了一上午,怎么改配置都不行
1 guisheng 2024-06-05 12:21:59 +08:00 via iPhone 容器异常或者不在同一个网络中 |
2 guisheng 2024-06-05 12:23:03 +08:00 via iPhone @guisheng 重启即可;前段时间遇到过 在同一个网络中 nginx 配置了未启动的容器就会这样报错 |
3 goforwardv2 OP @guisheng nginx 和 consul docker 开在一台机器上也不行,同时 consul 已经用了--network host 也不行 |
4 guisheng 2024-06-05 13:08:20 +08:00 via iPhone @goforwardv2 consul 先启动,nginx 后启动。 指定了宿主机网络的话 你给 nginx -add host |
5 F7TsdQL45E0jmoiG 2024-06-05 13:11:22 +08:00 nginx 中指定 resolver |
![]() | 6 hehe5120 2024-06-05 13:16:23 +08:00 6789 这个端口号好像不对吧。nginx 是在 docker 里面吗? 在 nginx 环境下 ping my-service.service.consul 的结果是什么? |
7 goforwardv2 OP @morenacl @hejiangyuan resolver 指定了,并且 nginx 是系统命令运行的 |
8 xoic 2024-06-05 13:56:08 +08:00 nginx 版本? |
9 goforwardv2 OP @xoic nginx version: nginx/1.14.0 (Ubuntu) |
![]() | 10 chenuu 2024-06-05 14:14:51 +08:00 nginx-plus 才支持 consul 吧 |
11 goforwardv2 OP @chenuu 有可能啊,尝试了很多方法都无效,我试试 nginx-plus |
![]() | 12 chenuu 2024-06-05 14:25:24 +08:00 开源的 nginx,对 consul 的话,你可以试试 consul-template 的方案,或者换掉 ng,使用 caddy 或者 traefik |
![]() | 13 guanzhangzhang 2024-06-05 14:52:11 +08:00 看着是你 resolve 的层级不对,你自己抓包 53 看看是不是发往 8.8.8.8 了 |
14 xoic 2024-06-05 14:53:56 +08:00 @goforwardv2 感觉版本不支持 resolver 带端口的写法 该指令出现在 1.17.5 版中。 配置用于将上游服务器的名称解析为地址的名称服务器,例如: resolver 127.0.0.1 [::1]:5353 valid=30s; 文档是这么写的。 |