我正在尝试使用 nginx 代理传递到两个 docker 容器。这是我的上游配置文件:
upstream api_servers {
server http://192.168.49.4:49155;
server http://192.168.49.4:49156;
}
这是我尝试加载时得到的结果:
nginx: [emerg] invalid host in upstream "http://192.168.49.4:49155" in /etc/nginx/conf.d/api_upstream.conf:3
nginx: configuration file /etc/nginx/nginx.conf test failed
一旦我删除 http:// 前缀,错误就不再发生。这是为什么?
答案1
上游块是具有可选状态池和连接限制的服务器列表。必须在指令中指定用于加入这些服务器的协议proxy_pass
。
upstream api_servers {
server 192.168.49.4:49155;
server 192.168.49.4:49156;
}
server {
[ ... ]
location /foo/ {
proxy_pass http://api_servers/;
}
}
答案2
语法:服务器地址 [参数];地址可以指定为域名或 IP 地址,带有可选端口,也可以指定为在“unix:”前缀后指定的 UNIX 域套接字路径。我认为您应该喜欢查看“http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream“。
答案3
我认为主机 [api_servers] 无效,因为下划线 ( _ ) 在域名中永远不是有效字符。删除上述 ngix 配置中的 ( _ ) 后,它开始对我起作用了。
例如:上游 apiservers {服务器 192.168.49.4:49155;服务器 192.168.49.4:49156;}
服务器 {
location /foo/ {
proxy_pass http://apiservers/;
}
}