我正在设置Apache Solr 4.1,它将用于索引Web应用程序的数据.只有Web应用程序才能访问Solr.用户和其他客户不会直接与Solr交谈.
确保此类Solr设置的一些最佳实践是什么?
(我们使用Jetty运行Solr)
解决方法
我知道你正在使用Jetty,但我有一个使用Tomcat的方法可以工作,并将在下面解释.
基本上,我已经放弃了尝试理解我认为Java Web应用程序在Jetty和Tomcat中保护自己的过于迟钝的方式.因此,我更愿意让Apache重新成为防御访问的第一道防线. Apache坚固可靠.如果您觉得需要额外的安全性,您可以随时安装ModSecurity等工具,以使其更加安全.
关键是在Apache中创建反向代理设置.将Solr运行的主机的Apache配置代码.我喜欢让它运行一个子目录,因此本例使用/ 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" />
现在这最后一部分?也许这就是你所需要的.也许您只想将该地址=“127.0.0.1”改为需要访问的一台机器的机器IP.但是你再次使用Jetty所以也许有一种相同的方法来限制Jetty中的一个IP?或者你甚至可以在Apache配置中限制通过IP.无论什么效果最好.