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 动态发现后端的服务器。