
Ich versuche, Elasticsearch über nginx zu proxyen. Die meisten Dinge scheinen zu funktionieren, aber es gibt Probleme beim Erstellen von Indizes.
Dies funktioniert bei einer direkten Verbindung mit 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
Aber wenn ich versuche, nginx als Proxy vor ES zu setzen, erhalte ich von ES eine 404-Meldung. Meine nginx-Konfiguration ist:
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 ist so eingerichtet, dass es auf einer IP-Adresse lauscht, daher glaube ich nicht, dass dies damit zusammenhängt, dass Host-Header nicht übergeben werden:
# elasticsearch.yml
network.bind_host: 127.0.0.2
Das fühlt sich an wie etwas Heikles an ES, aber vielleicht mache ich etwas Dummes und Falsches mit dem Nginx-Proxy. Ich bin mir nicht wirklich sicher, was ich sonst noch versuchen soll. Ich habe einige ähnliche Probleme gesehen, bei denen die Lösung darin bestand, Nginx nicht zu verwenden, aber das ist für mich keine wirkliche Option.
nginx 1.14, Elasticsearch 1.7.
Antwort1
Bitte schauen Sie sich anhttps://www.nginx.com/blog/nginx-elasticsearch-better-together/#proxy_cache_valid
speziell die folgenden Parameter.
proxy_cache elasticsearch;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;