Противоположное поведение keepalive (обратный прокси nginx на ElasticSearch)

Я настраиваю обратный прокси nginx для ElasticSearch (с помощью 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 и должен поддерживать постоянное соединение (keepalive) с Elasticsearch.

Это результат посещения 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) и перезагрузке поле не должно меняться.

На самом деле все происходит наоборот. В чем причина этого странного поведения?

Вы определили upstream контейнер под названием elasticsearch . Но вы не вызываете его. Попробуйте заменить свою директиву proxy_pass на:

 proxy_pass http://elasticsearch; 

Подробнее см. В этом документе .