在生产中保护Apache Solr

我正在设置将用于为Web应用程序索引数据的Apache Solr 4.1。 只有networking应用程序才能访问Solr。 用户和其他客户不会直接与Solr对话。

什么是保护这种types的Solr设置的一些最佳做法?

(我们使用Jetty运行Solr)

我知道你正在使用Jetty,但我有一个使用Tomcat的方法工作,并将在下面解释。

基本上,我已经放弃了试图理解Java Web应用程序在Jetty和Tomcat中保护自己的过分顽固的方式。 所以我更喜欢让Apache做重要的防线访问的第一道防线。 Apache是​​坚实可靠的。 如果您觉得需要额外的安全性,您可以随时安装ModSecurity等工具,使其更安全。

关键是在Apache中创build一个反向代理设置。 将代码放入将要运行Solr的主机的Apacheconfiguration中。 我喜欢让它从一个子目录运行,所以这个例子使用/solr作为ProxyPassProxyPassReverse设置的一个例子。 首先这里是添加一个尾部的斜杠到URL的设置,所以调用http://my.server.is.great/solr被转换为http://my.server.is.great/solr/

 # Settings for adding a trailing slash to the URL RewriteEngine On RewriteCond %{REQUEST_URI} ^/(solr)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L] 

现在来看看mod_proxy东西,它将Tomcat Web应用程序路由到Apache前端。

 # Settings for Solr in Apache <IfModule mod_proxy.c> # Proxy specific settings ProxyRequests Off ProxyPreserveHost On <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyPass /solr http://localhost:8080/solr/ ProxyPassReverse /solr http://localhost:8080/solr/ </IfModule> 

在这一点上,我会重新启动Apache,看看是否有效。 如果是的话,一切都好! 现在,最后一步是进入Tomcat XML文件并通过将address="127.0.0.1"添加到连接器来限制Solr仅响应localhost / 127.0.0.1请求。

 <Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> 

现在这最后一部分? 也许这是你需要的一切。 也许你只是想把这个address="127.0.0.1"改为需要访问的一台机器的机器IP地址。 但是,你再次使用Jetty,所以也许有一种等同的方式来限制在Jetty中的一个IP? 或者你甚至可以在Apacheconfiguration中通过IP进行限制。 无论什么效果最好。

如果可能,请使用SSL并要求对所有内容进行validation。

对于SSL,请参阅Jetty文档 。

对于authentication,Solr文档中有一个很好的示例 。