Opposite behavior of keepalive (nginx reverse proxy on ElasticSearch)

I am setting up a nginx reverse proxy for ElasticSearch (with HTTP Basic
Auth) as described in this article:

This is my nginx config file:

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_http_version 1.1;
proxy_set_header Connection “Keep-Alive”;
proxy_set_header Proxy-Connection “Keep-Alive”;

The proxy correctly forwards port 8080 to 9200, and is supposed to keep
persistent connections (keepalive) to Elasticsearch.

This is the result of visiting either the URL
http://elasticsearch.example.org:9200/_nodes/stats/http?pretty or
http://elasticsearch.example.org:8080/_nodes/stats/http?pretty (HTTP
authentication has already been done) in a browser:

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

When visiting the page on port 9200 (direct connection to Elasticsearch)
reloading, the field total_opened is supposed to increase, while when
visiting on port 8080 (through the nginx proxy) and reloading, the field
should not change.

In fact, it happens the opposite. What is the reason of this strange

Posted at Nginx Forum:

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs