Я пытаюсь проксировать 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;