我一直在尝试使用elasticsearch.jquery.min.js ping一个本地运行的elasticsearch,我得到一个没有生活连接的#34;错误每次。
ETA:在Chrome中,我看到的内容看起来非常低级" Connection Refused"。我在MacOS X上进行开发,我的浏览器通过http://localhost/~myuserid/SiteName/
指向该页面。因为我访问localhost:9200
这明显属于跨域CORS要求。
我在Chrome控制台中看到以下错误:
XMLHttpRequest cannot load http://localhost:9200/?hello=elasticsearch!.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost' is therefore not allowed access.
Per http://enable-cors.org/server_apache.html我已将以下内容添加到/etc/apache2/httpd.conf中:
<Directory />
Header set Access-Control-Allow-Origin "localhost:9200"
AllowOverride none
Require all denied
</Directory>
并运行
$ sudo apachectl -t
$ sudo apachectl -k graceful
但错误仍然存在。还有另一种我忽视的环境吗?
我是elasticsearch.js的菜鸟。我需要在弹性搜索方面做些什么来允许来自浏览器的客户端连接,还是什么?
我在ping尝试中跟随the book:
var client = new $.es.Client({
hosts: 'localhost:9200'
});
client.ping(
{
requestTimeout: Infinity,
// undocumented params are appended to the query string
hello: "elasticsearch!"
},
function (error) {
if (error) {
console.error('elasticsearch cluster is down!');
console.error(error);
} else {
console.log('All is well');
}
}
);
但我收到以下错误:
"WARNING: 2015-10-10T07:00:16Z" elasticsearch.jquery.min.js:14:10575
Unable to revive connection: http://localhost:9200/
"WARNING: 2015-10-10T07:00:16Z" elasticsearch.jquery.min.js:14:10575
No living connections
我可以在命令行上使用curl连接就好了,拉动和插入数据等:
$ curl "localhost:9200/_cat/indices?v"
health status index pri rep docs.count docs.deleted store.size pri.store.size
green open fuddle 1 0 3 0 12.9kb 12.9kb
green open faddle 1 0 0 0 144b 144b
ETA附加诊断。 Google Chrome会显示失败尝试的以下网络跟踪。在HTTP层,响应看起来就像是在发生。
General
Remote Address:[::1]:9200
Request URL:http://localhost:9200/?hello=elasticsearch!
Request Method:HEAD
Status Code:200 OK
Response Headers
Content-Length:0
Content-Type:text/plain; charset=UTF-8
Request Headers
Accept:text/plain, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:0
Host:localhost:9200
Origin:http://localhost
Referer:http://localhost/~browsc3/Opticon/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Query String Parameters
view URL encoded
hello:elasticsearch!
wget中的相同请求:
wget http://localhost:9200/?hello=elasticsearch!
--2015-10-10 09:47:13-- http://localhost:9200/?hello=elasticsearch!
Resolving localhost... ::1, 127.0.0.1
Connecting to localhost|::1|:9200... connected.
HTTP request sent, awaiting response... 200 OK
Length: 342 [application/json]
Saving to: 'index.html?hello=elasticsearch!'
index.html?hello=elastics 100%[=====================================>] 342 --.-KB/s in 0s
2015-10-10 09:47:13 (65.2 MB/s) - 'index.html?hello=elasticsearch!' saved [342/342]
我真的不知道从哪里开始。我在googlz上看到了很多关于错误的引用,但没有一个情况看起来很相似。感觉我只是遇到了一些错误的配置,但我找不到任何可以表明它是什么的东西。
答案 0 :(得分:22)
嗯,这是一个艰难的。
以下是解决问题的原因:
每http://enable-cors.org/server_apache.html,在/etc/apache2/httpd.conf
中,配置Access-Control-Allow-Origin:
<Directory />
# Add the following line to enable CORS to connect to local elasticsearch.
Header set Access-Control-Allow-Origin "localhost:9200"
AllowOverride none
Require all denied
</Directory>
每https://jsbroadcast.com/elastic-search-cors/,在elasticsearch-1.7.0/config/elasticsearch.yml
添加:
http.cors.enabled : true //
http.cors.allow-origin: "/.*/"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : "X-Requested-With,X-Auth-Token,Content-Type, Content-Length, Authorization"
我现在可以毫无错误地运行client.ping
来电。
答案 1 :(得分:4)
只需将其添加到elasticsearch.yml
即可。
http.cors.enabled: true
http.cors.allow-origin: "/.*/"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With,X-Auth-Token,Content-Type, Content-Length, Authorization"
您不需要向Apache添加任何内容。
答案 2 :(得分:2)
输入你的elasticsearch.yml配置文件,位于elasticsearch-xxx \ config \ elasticsearch.yml,下面一行
http.cors.enabled: true
并在您的互联网导航器中启用cors。 重新启动弹性搜索服务器,然后重试。