
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
しかし、ES の前に nginx をプロキシとして設置しようとすると、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;