
Я пытаюсь проксировать 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, я получаю от ES 404. Мой конфиг 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.
решение1
Пожалуйста, посмотритеhttps://www.nginx.com/blog/nginx-elasticsearch-better-together/#proxy_cache_valid
особенно нижеприведенные параметры.
proxy_cache elasticsearch;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;