我正在尝试通过 nginx 代理 Elasticsearch。大多数操作似乎都正常,但创建索引时出现了问题。
直接连接到 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;