elasticsearch.js客户端连接被拒绝:Access-Control-Allow-Origin无法识别?

我一直在尝试使用elasticsearch.jquery.min.js来ping一个本地运行的elasticsearch,并且每次都得到一个“no living connection”错误。


ETA:在Chrome中,我看到了什么看起来像一个相当低的水平“拒绝连接”。 我正在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. 

按照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的noob。 在弹性search方面有什么我需要做的,以允许来自浏览器的客户端连接,或者什么?

我在我的ping的尝试中跟随这本书 :

 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附加诊断。 谷歌浏览器会显示以下networking跟踪失败的尝试。 在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错误的参考,但是没有一个情况看起来很类似。 这感觉就像我只是一些错误的configuration,但我找不到任何可以指示这是什么的东西。

那么这是一个艰难的。

这是什么修复它:

按照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调用没有任何错误。

只要将此添加到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添加任何内容。

把你的elasticsearch.yml配置文件放在elasticsearch-xxx \ config \ elasticsearch.yml中,位于下面一行

 http.cors.enabled: true 

并在您的Internet导航器中启用cors。 重新启动你的elasticsearch服务器,然后重试。