我正在使用Jetty设置Solr。我想限制只访问几个IP地址。使用Jetty可以做到这一点似乎并不明显。是否可能,如果可能,怎么样?
答案 0 :(得分:28)
Solr 4.2.1使用Jetty 8.1.8。 Jetty 8(由jonas789指出)不支持.htaccess。相反,它使用IPAccessHandler,它没有很好的文档可用。为了让它起作用,我不得不玩它很多,所以我在这里发布了一个更新的解决方案。
IPAccessHandler管理黑名单和白名单,接受任意范围的IP,并支持将特定URI路径附加到每个white / black -list条目。 IPAccessHandler也是HandlerWrapper的子类,后来证明这很重要。
solr app仍然存在于WebAppContext中(如在Lyndsay的解决方案中),但WebAppContext现在由ContextHandler管理,ContextHandler驻留在占用服务器中第一个处理程序槽的ContextHandlerCollection中。要阻止来自错误IP的请求进入应用程序,我们需要将其包含在沿该路径某处的IPAccessHandler内。 IPAccessHandler在错误的位置表现得很奇怪:我尝试在上下文处理程序之前插入它它将403 Forbidden给了错误的机器,抛出NullPointerException发脾气而没有其他错误消息,各种废话。我终于通过在服务器级别包装ContextHandlerCollection本身来实现它。
转到etc/jetty.xml
并滚动到处理程序部分。然后包装现有的ContextHandlerCollection项,如下所示:
<!-- =========================================================== -->
<!-- Set handler Collection Structure -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<!-- here begins the new stuff -->
<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>
<!-- here ends the new stuff -->
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
资源:
答案 1 :(得分:8)
我找到了解决方案。
首先,在example / webapps文件夹中提取solr.war的内容。 然后创建一个名为.htaccess的文件,并将其放在example / webapps / solr文件夹(刚提取的文件夹)中,其中包含以下内容:
<Limit>
satisfy all
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Limit>
在示例/ etc /中编辑jetty.xml文件并注释掉org.mortbay.jetty.deployer.WebAppDeployer部分。然后最后在example / called contexts中创建一个文件夹(如果还没有),并添加一个名为solr.xml的文件,其中包含:
<Configure id="solr" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/solr</Set>
<Set name="contextPath">/solr</Set>
<Call name="setSecurityHandler">
<Arg>
<New class="org.mortbay.jetty.security.HTAccessHandler">
<Set name="protegee">
<Ref id="solr"/>
</Set>
</New>
</Arg>
</Call>
</Configure>
然后启动新的安全solr!