keepalive 的相反行为(ElasticSearch 上的 nginx 反向代理)

keepalive 的相反行为(ElasticSearch 上的 nginx 反向代理)

我正在为 ElasticSearch 设置 nginx 反向代理(使用 HTTP Basic Auth),如上所述在本文中

这是我的 nginx 配置文件:

events {
        worker_connections  1024;
}


http {
        upstream elasticsearch {
                server elasticsearch.example.org:9200;
                keepalive 64;
        }

        server {
                listen 8080;

                location / {
                        auth_basic "ElasticSearch";
                        auth_basic_user_file /var/www/.htpasswd;

                        proxy_pass http://elasticsearch.example.org:9200;
                        proxy_http_version 1.1;
                        proxy_set_header Connection "Keep-Alive";
                        proxy_set_header Proxy-Connection "Keep-Alive";
                }
        }
}

代理正确地将端口 8080 转发到 9200,并且应该保持与 Elasticsearch 的持久连接 (keepalive)。

这是访问 URL 的结果http://elasticsearch.example.org:9200/_nodes/stats/http?pretty或者http://elasticsearch.example.org:8080/_nodes/stats/http?pretty(HTTP认证已经完成)在浏览器中:

{
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "rIFmzNwsRvGp8kipbcwajw" : {
      "timestamp" : 1455899085319,
      "name" : "Kid Colt",
      "transport_address" : "elasticsearch.example.org/10.3.3.3:9300",
      "host" : "10.3.3.3",
      "ip" : [ "elasticsearch.example.org/10.3.3.3:9300", "NONE" ],
      "http" : {
        "current_open" : 3,
        "total_opened" : 28
      }
    }
  }
}

当访问 9200 端口(直接连接 Elasticsearch)页面并重新加载时,该字段total_opened应该会增加,而当访问 8080 端口(通过 nginx 代理)并重新加载时,该字段不应改变。

事实上,情况恰恰相反。这种奇怪行为的原因是什么?

答案1

您已经定义了一个upstream名为 的容器elasticsearch。但你不调用它。尝试将您的proxy_pass指令替换为:

proxy_pass http://elasticsearch;

这个文件了解详情。

相关内容