solr - 如何使用 IPAccessHandler 限制集群 Solr 环境中的 IP?
问题描述
我们有一个 Solr 集群系统(两个实例在两台服务器上运行),其中使用 zookeeper 维护仲裁。我们可以通过点击直接服务器 URL 或一揽子负载均衡器 URL 来访问 Solr。我们需要将访问这三个 URL 的一些 IP 列入白名单
我已经尝试过这里提到的步骤: Restricting IP addresses for Jetty and Solr
在这里: http: //lucene.472066.n3.nabble.com/How-To-Secure-Solr-by-IP-Address-td4304491.html
第一种方法的问题是我不能为白名单添加多个 IP
第二种方法的问题是,虽然它允许将字符串数组中的多个 IP 列入白名单,但当我们使用负载均衡器 URL 访问 Solr 时,它无法识别列入白名单的 IP。只有当我们点击单个服务器 URL 时它才能正常工作
另外,我尝试调用 addWhite 方法,但这也不起作用,Solr 无法启动。
<New id="IPAccessHandler"
class="org.eclipse.jetty.server.handler.IPAccessHandler">
<Set name="white">
<Array type="String">
<Item>127.0.0.1</Item>
<Item>-.-.-.-|/solr/techproducts/select</Item>
</Array>
</Set>
<Set name="whiteListByPath">false</Set>
<Set name="handler">
<New id="Contexts"
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Set>
</New>
这不适用于负载均衡器
<New class="org.eclipse.jetty.server.handler.IPAccessHandler">
<Call name="addWhite">
<Arg>xxx.xxx.xxx.xxx</Arg>
</Call>
<Set name="handler">
<!-- here's where you put what was there before: -->
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Set>
</New>
这不允许将多个 IP 作为参数传递给白名单
解决方案
也许这为时已晚,但我遇到了同样的问题,需要将多个 IP 地址列入白名单,所以我想我会分享我找到的解决方案。我正在运行 Jetty 8.1.16.v20140903 作为 CollabNet Subversion Edge 安装的一部分,这对我有用:
<New class="org.eclipse.jetty.server.handler.IPAccessHandler">
<Call name="setWhite">
<Arg>
<Array type="java.lang.String">
<Item>xxx.xxx.xxx.xxx</Item>
<Item>yyy.yyy.yyy.yyy</Item>
</Array>
</Arg>
</Call>
<Set name="handler">
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Set>
</New>
请注意,我将Call
标签更改为 usesetWhite
并将 更改Arg
为包含Array
. 我根据我在 Jetty 8.1.16 的 JavaDoc 中看到的内容进行了此更改:http: //archive.eclipse.org/jetty/8.1.16.v20140903/apidocs/org/eclipse/jetty/server/handler/IPAccessHandler。 html
MatsLindh所做的评论 可能是一个更好的长期解决方案(通过操作系统防火墙控制访问),但我在这里所做的方法也应该可以完成工作。