使用OpenSSL/https保护多核solr/jetty服务器
我有一个多核solr实例在Jetty服务器上运行,我正在努力保护后端。我已将Jetty配置为使用https协议,当我向solr提交/select时,一切正常,但不使用任何碎片,如:使用OpenSSL/https保护多核solr/jetty服务器,ssl,solr,openssl,jetty,Ssl,Solr,Openssl,Jetty,我有一个多核solr实例在Jetty服务器上运行,我正在努力保护后端。我已将Jetty配置为使用https协议,当我向solr提交/select时,一切正常,但不使用任何碎片,如: https://localhost:7450/solr/core0/select?indent=true&rows=10&start=0&q=*:* 我得到了我的搜索结果,一切都很好 但当我想搜索所有碎片时: https://localhost:7450/solr/core0/select?
https://localhost:7450/solr/core0/select?indent=true&rows=10&start=0&q=*:*
我得到了我的搜索结果,一切都很好
但当我想搜索所有碎片时:
https://localhost:7450/solr/core0/select?indent=true&rows=10&start=0&q=*:*&shards=localhost:7450/solr/core0,localhost:7450/solr/core1,...
我得到以下例外。我猜我需要以某种方式配置solr本身,以便它通过https协议向其他碎片发送/接收请求,但在搜索Google数小时后,我运气不佳
org.apache.solr.common.SolrException
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:275)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1376)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: org.apache.solr.client.solrj.SolrServerException: org.apache.commons.httpclient.ProtocolException: The server localhost failed to respond with a valid HTTP response
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:472)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:249)
at org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:129)
at org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:103)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:637)
Caused by: org.apache.commons.httpclient.ProtocolException: The server localhost failed to respond with a valid HTTP response
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1987)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:419)
... 8 more
我正在使用Solr 3.6和Jetty 6.1-SNAPSHOT。您应该能够在solrconfig.xml中为core0设置用于碎片调用的URL方案:
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<!-- other params go here -->
<shardHandlerFactory class="HttpShardHandlerFactory">
<str name="urlScheme">https://</str>
</shardHandlerFactory>
</requestHandler>
https://
从源代码来看,这似乎适用于Solr 3.6.0及更高版本。不过,我仍然在使用Solr3.4.0,所以我自己没有尝试过
参考资料:我仍在为自己进行此设置,但似乎已在Solr 4.7中添加了支持。请参阅原始错误:您使用的是哪个Solr版本?你能在你的分片上禁用https并且只向用户公开一个solr服务器吗?问题是目前分片上没有启用https,我正在寻找一种启用它的方法。我在原始帖子中添加了solr和jetty版本信息,并提供了更多细节。