我正在设置将用于为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
作为ProxyPass
和ProxyPassReverse
设置的一个例子。 首先这里是添加一个尾部的斜杠到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文档中有一个很好的示例 。