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

查看 63|回复 9
作者: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
搞了一上午,怎么改配置都不行
nginx 没有运行在 docker 里面,是系统命令运行。
nginx.conf 配置如下:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes auto;
worker_rlimit_nofile 30000;
events {
worker_connections 10240;
}
http {
client_max_body_size 100m;
resolver 8.8.8.8;

upstream specification_server {
server 127.0.0.1:6088;
server 127.0.0.1:6089;
}

upstream http_server {
server 172.16.15.9:8090;
server 172.16.15.9:8091;
}

server {
listen 80;
location /get {
proxy_pass http://http_server/get;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /usr/share/nginx/html;
}
location = /maintenance.html {
root /usr/share/nginx/html;
internal;
}
# 其他配置项...
}
}
stream {
resolver 192.168.1.125:8600 valid=30s;
upstream tcp_servers {
server my-service.service.consul:6789;
#server 192.168.1.126:6789;
}
server {
listen 12345;
proxy_pass tcp_servers;
proxy_connect_timeout 1s;
}
}
如果直接用 nginx.conf 只用 server 192.168.1.126:6789;是可以的,但是就失去意义了,向让 nginx 动态发现后端的服务器。
guisheng   
nginx 没有运行在 docker 里面,是系统命令运行。
nginx.conf 配置如下:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes auto;
worker_rlimit_nofile 30000;
events {
worker_connections 10240;
}
http {
client_max_body_size 100m;
resolver 8.8.8.8;

upstream specification_server {
server 127.0.0.1:6088;
server 127.0.0.1:6089;
}

upstream http_server {
server 172.16.15.9:8090;
server 172.16.15.9:8091;
}

server {
listen 80;
location /get {
proxy_pass http://http_server/get;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /usr/share/nginx/html;
}
location = /maintenance.html {
root /usr/share/nginx/html;
internal;
}
# 其他配置项...
}
}
stream {
resolver 192.168.1.125:8600 valid=30s;
upstream tcp_servers {
server my-service.service.consul:6789;
#server 192.168.1.126:6789;
}
server {
listen 12345;
proxy_pass tcp_servers;
proxy_connect_timeout 1s;
}
}
如果直接用 nginx.conf 只用 server 192.168.1.126:6789;是可以的,但是就失去意义了,向让 nginx 动态发现后端的服务器。
guisheng   
容器异常或者不在同一个网络中
goforwardv2
OP
  
@guisheng 重启即可;前段时间遇到过 在同一个网络中 nginx 配置了未启动的容器就会这样报错
guisheng   
@guisheng nginx 和 consul docker 开在一台机器上也不行,同时 consul 已经用了--network host 也不行
morenacl   
@goforwardv2 consul 先启动,nginx 后启动。 指定了宿主机网络的话 你给 nginx -add host
hejiangyuan   
nginx 中指定 resolver
goforwardv2
OP
  
6789 这个端口号好像不对吧。nginx 是在 docker 里面吗? 在 nginx 环境下 ping my-service.service.consul 的结果是什么?
xoic   
@morenacl @hejiangyuan resolver 指定了,并且 nginx 是系统命令运行的
hejiangyuan   
nginx 版本?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部