elasticsearch 索引\u未找到\u异常-Elasticsearch,elasticsearch,nginx,elasticsearch,Nginx" /> elasticsearch 索引\u未找到\u异常-Elasticsearch,elasticsearch,nginx,elasticsearch,Nginx" />

elasticsearch 索引\u未找到\u异常-Elasticsearch

elasticsearch 索引\u未找到\u异常-Elasticsearch,elasticsearch,nginx,elasticsearch,Nginx,在图1中,如您所见,我在触发GET请求时得到了有效的ES响应。但是,如果我尝试通过我创建的NGINX反向代理执行相同的操作,并点击myip/elasticsearch,它会返回错误(图2)。有人能帮我吗 server { listen 80; server_name myip; location /elasticsearch/ { proxy_pass http://127.0.0.1:9200; } location /kibana/

在图1中,如您所见,我在触发GET请求时得到了有效的ES响应。但是,如果我尝试通过我创建的NGINX反向代理执行相同的操作,并点击myip/elasticsearch,它会返回错误(图2)。有人能帮我吗

server {
    listen 80;
    server_name myip;

    location /elasticsearch/ {
        proxy_pass http://127.0.0.1:9200;
    }
    location /kibana/ {
        proxy_pass http://127.0.0.1:5601;
    }

}


问题在于路径。Nginx正在未经修改地传递它

proxy\u pass
URL处添加斜杠

server {
    listen 80;
    server_name myip;

    location /elasticsearch/ {
        proxy_pass http://127.0.0.1:9200/;
    }
    location /kibana/ {
        proxy_pass http://127.0.0.1:5601/;
    }

}
从:

注意,在上面的第一个示例中,代理服务器的地址后面跟着一个URI,/link/。如果URI与地址一起指定,它将替换与位置参数匹配的请求URI部分。例如,这里将代理具有/some/path/page.html URI的请求。如果指定的地址没有URI,或者无法确定要替换的URI部分,则传递完整的请求URI(可能是修改的)


正确的方法是指定这两个斜杠。
127.0.0.1:9000之后的斜杠是必不可少的,如果没有它,您的请求
/elasticsearch/some/route
将按原样传递,而使用该斜杠,则将按
/some/route
传递。在nginx术语中,这意味着您在后端名称之后指定了一个URI。也就是说,在
位置
指令(
/elasticsearch/
)中指定的URI前缀从原始URI(我们在这个阶段有
some/route
)中剥离出来,并在后端名称(
/
)之后指定URI作为前缀,从而导致
/
+
some/route
=
=
/some/route
)。您可以在
proxy\u pass
指令中指定任何路径,例如,使用
proxy\u passhttp://127.0.0.1:9200/prefix/
该请求将作为
/prefix/some/route
传递到后端。现在,如果您理解了所说的一切,您可以看到指定
location/elasticsearch{…}
而不是
location/elasticsearch/{…}
将为您提供
//some/route
而不是
/some/route
。我不确定这到底是你的问题的原因

    location /elasticsearch/ {
        proxy_pass http://127.0.0.1:9200/;
    }
你说得更正确


现在,我想问一下,对于
curl-I,这个配置到底得到了什么http://localhost:9200/
curl-ihttp://localhost/
?我想查看所有的标题(当然,包含私人信息的标题除外)。

我刚刚意识到不需要在路径后再加一个斜杠。因此,我删除了
/
,现在它看起来像
位置/elasticsearch
。然而,我在
proxy\u pass中不断得到相同的异常http://127.0.0.1:9200/
以及代理通行证http://127.0.0.1:9200
它正在工作。端口号后的斜杠很重要。我在配置时输入了一个错误。非常感谢。