我想我在这里遗漏了一些明显的东西。我想象很多人向其他开发人员开放他们的 Solr 服务器,并且不希望他们能够修改索引。
solrconfig.xml 中是否有一些内容可以设置为有效地使索引只读?
更新澄清: 我的目标是将 Solr 与由另一个应用程序管理的现有 Lucene 索引一起使用。这工作得很好,但我想确保 Solr 永远不会尝试写入这个索引。
将 Solr 实例暴露到公共互联网是一个坏主意。尽管您可以删除一些组件以使其只读,但它在设计时并未考虑到安全性,它旨在用作内部服务,就像您不会公开 RDBMS 一样。
来自 Solr 安全 wiki 页面:
首先也是最重要的一点,Solr 不 关心安全问题 文档级别或 沟通水平。它是强烈的 建议申请 包含 Solr 的服务器受防火墙保护 这样唯一可以访问的客户 Solr 是你自己的。默认/示例 Solr 的安装允许任何客户端 可以访问它来添加、更新和 删除文档(当然还有 搜索/阅读),包括访问 Solr 配置和架构 文件和管理用户 接口。
即使是 ajax-solr,一个用于在浏览器中运行的 JavaScript 的 Solr 客户端,也建议通过代理与 Solr 通信。
以 guardian.co.uk 为例:众所周知,他们使用 Solr 进行搜索,但他们构建了一个 API 来让其他人访问他们的内容。这样他们就可以定义和控制他们希望人们搜索什么以及如何搜索。
否则,任何脚本小子都可以编写一个简单的循环来对您的 Solr 实例进行 DoS,从而导致您的站点瘫痪。
您可能只需删除 solrconfig.xml 中定义 solr.XmlUpdateRequestHandler 的行即可。
复制是一种在能够进行索引的同时设置只读的好方法。只需设置一个具有受限访问权限的主服务器和一个只读的从服务器(通过从配置中删除 XmlUpdateRequestHandler)。从站将从主站复制,但不会直接接受任何索引。
更新
我刚刚读到,在 Solr 1.4 中,您可以禁用组件。我刚刚在 /update requestHandler 上尝试过,但无法再索引。
不是最优雅的解决方案,但使用 Solr 7.2.1 我已将以下内容添加到 SolrConfig.xml,以将更新请求推送到 SearchHandler - 它们失败 - 有效地将索引呈现为只读 - 似乎有效,我是如果有的话,愿意接受更优雅的解决方案吗?
<!-- Bogus update handler - effectively makes index read-only -->
<requestHandler name="/update" class="solr.SearchHandler" />