我想使用Nginx作为Consul集群的负载均衡器。Consul集群只能通过TLS访问。
这里我尝试反向代理单个Consul服务器,以检查TLS证书是否有效。
这个配置正常工作,我可以使用它进行调用。
当我调用与之前相同的curl命令时,出现以下错误:
这里我尝试反向代理单个Consul服务器,以检查TLS证书是否有效。
server {
listen 80;
listen [::]:80;
location /consul/ {
resolver 127.0.0.1;
proxy_pass https://core-consul-server-1-dev.company.io:8500;
sub_filter_types text/css application/javascript;
sub_filter_once off;
sub_filter /v1/ /consul_v1/;
proxy_ssl_certificate /etc/nginx/certs/agent.crt;
proxy_ssl_certificate_key /etc/nginx/certs/agent.key;
proxy_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 4;
}
}
这个配置正常工作,我可以使用它进行调用。
curl http://core-proxy-server-1-dev.company.io/consul/consul_v1/agent/members
现在我尝试这样做一个上游:
upstream consul {
server core-consul-server-1-dev.company.io:8500;
server core-consul-server-2-dev.company.io:8500;
}
server {
listen 80;
listen [::]:80;
location /consul/ {
resolver 127.0.0.1;
proxy_pass https://consul;
sub_filter_types text/css application/javascript;
sub_filter_once off;
sub_filter /v1/ /consul_v1/;
proxy_ssl_certificate /etc/nginx/certs/agent.crt;
proxy_ssl_certificate_key /etc/nginx/certs/agent.key;
proxy_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 4;
}
}
当我调用与之前相同的curl命令时,出现以下错误:
2021/04/20 08:38:59 [debug] 3364#3364: *1 X509_check_host(): no match
2021/04/20 08:38:59 [error] 3364#3364: *1 upstream SSL certificate does not match "consul" while SSL handshaking to upstream, client: 10.10.xx.xxx, server: , request: "GET /consul/consul_v1/agent/members HTTP/1.1", upstream: "https://10.10.yy.yyy:8500/consul/consul_v1/agent/members", host: "core-proxy-server-1-dev.company.io"
那么我尝试了这个:
upstream consul_1 {
server core-consul-server-1-dev.company.io:8500;
}
upstream consul_2 {
server core-consul-server-2-dev.company.io:8500;
}
map $http_host $backend {
core-consul-server-1-dev.company.io consul_1;
core-consul-server-2-dev.company.io consul_2;
}
server {
listen 80;
listen [::]:80;
location /consul/ {
resolver 127.0.0.1;
proxy_pass https://$backend;
sub_filter_types text/css application/javascript;
sub_filter_once off;
sub_filter /v1/ /consul_v1/;
proxy_ssl_certificate /etc/nginx/certs/agent.crt;
proxy_ssl_certificate_key /etc/nginx/certs/agent.key;
proxy_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 4;
}
}
但是也没有运气;
2021/04/20 08:45:05 [error] 3588#3588: *1 invalid URL prefix in "https://", client: 10.10.xx.xxx, server: , request: "GET /consul/consul_v1/agent/members HTTP/1.1", host: "core-proxy-server-1-dev.company.io"
有什么想法吗?有人可以帮我解决一个问题吗?