我正在为 ElasticSearch 设置 nginx 反向代理(使用 HTTP Basic Auth),如上所述在本文中。
这是我的 nginx 配置文件:
events {
worker_connections 1024;
}
http {
upstream elasticsearch {
server elasticsearch.example.org:9200;
keepalive 64;
}
server {
listen 8080;
location / {
auth_basic "ElasticSearch";
auth_basic_user_file /var/www/.htpasswd;
proxy_pass http://elasticsearch.example.org:9200;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
}
}
}
代理正确地将端口 8080 转发到 9200,并且应该保持与 Elasticsearch 的持久连接 (keepalive)。
这是访问 URL 的结果http://elasticsearch.example.org:9200/_nodes/stats/http?pretty或者http://elasticsearch.example.org:8080/_nodes/stats/http?pretty(HTTP认证已经完成)在浏览器中:
{
"cluster_name" : "elasticsearch",
"nodes" : {
"rIFmzNwsRvGp8kipbcwajw" : {
"timestamp" : 1455899085319,
"name" : "Kid Colt",
"transport_address" : "elasticsearch.example.org/10.3.3.3:9300",
"host" : "10.3.3.3",
"ip" : [ "elasticsearch.example.org/10.3.3.3:9300", "NONE" ],
"http" : {
"current_open" : 3,
"total_opened" : 28
}
}
}
}
当访问 9200 端口(直接连接 Elasticsearch)页面并重新加载时,该字段total_opened
应该会增加,而当访问 8080 端口(通过 nginx 代理)并重新加载时,该字段不应改变。
事实上,情况恰恰相反。这种奇怪行为的原因是什么?
答案1
您已经定义了一个upstream
名为 的容器elasticsearch
。但你不调用它。尝试将您的proxy_pass
指令替换为:
proxy_pass http://elasticsearch;
看这个文件了解详情。