首页 > 解决方案 > 如何使用 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 作为参数传递给白名单

标签: solrapache-zookeepersolr6jetty-8

解决方案


也许这为时已晚,但我遇到了同样的问题,需要将多个 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所做的评论 可能是一个更好的长期解决方案(通过操作系统防火墙控制访问),但我在这里所做的方法也应该可以完成工作。


推荐阅读