Назад | Перейти на главную страницу

Elasticsearch 404 пытается создать индекс через прокси-сервер nginx

Я пытаюсь проксировать Elasticsearch через nginx. Кажется, что большинство вещей работает, но есть проблема с созданием индексов.

Это работает при прямом подключении к ES:

curl -XPUT http://localhost:9200/foo" -fsS -o/dev/null -d@- << BODY
{
  "settings": {
    "analysis": {
      "analyzer": {
        "case_insensitive_sort": {
          "tokenizer": "keyword",
          "filter": ["lowercase"]
        }
      }
    },
    "index": {
      "number_of_replicas": 0
    }
  }
}
BODY

Но когда я пытаюсь поставить nginx в качестве прокси перед ES, я получаю 404 от ES. Моя конфигурация nginx:

upstream es {
  server 127.0.0.2:9200;
}

map $request_method $upstream {
  default es;
}

server {
  listen 127.0.0.1:9200;
  client_max_body_size 20M;

  location / {
    proxy_pass http://$upstream;
  }
}

ES настроен на прослушивание IP-адреса, поэтому я не думаю, что это связано с тем, что заголовки хоста не передаются:

# elasticsearch.yml
network.bind_host: 127.0.0.2

Это похоже на что-то привередливое в ES, но, возможно, я делаю что-то глупое и неправильное с прокси-сервером nginx. Я не совсем уверен, что еще попробовать. Я видел некоторые связанные проблемы, когда решение заключалось в том, чтобы не использовать nginx, но на самом деле это не вариант для меня.

nginx 1.14, elasticsearch 1.7.

Пожалуйста, посмотрите на https://www.nginx.com/blog/nginx-elasticsearch-better-topting/#proxy_cache_valid

специально под параметрами.

    proxy_cache elasticsearch;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;