以只读模式运行 Solr

问题描述 投票:0回答:3

我想我在这里遗漏了一些明显的东西。我想象很多人向其他开发人员开放他们的 Solr 服务器,并且不希望他们能够修改索引。

solrconfig.xml 中是否有一些内容可以设置为有效地使索引只读?

更新澄清: 我的目标是将 Solr 与由另一个应用程序管理的现有 Lucene 索引一起使用。这工作得很好,但我想确保 Solr 永远不会尝试写入这个索引。

solr
3个回答
7
投票

将 Solr 实例暴露到公共互联网是一个坏主意。尽管您可以删除一些组件以使其只读,但它在设计时并未考虑到安全性,它旨在用作内部服务,就像您不会公开 RDBMS 一样。

来自 Solr 安全 wiki 页面

首先也是最重要的一点,Solr 不 关心安全问题 文档级别或 沟通水平。它是强烈的 建议申请 包含 Solr 的服务器受防火墙保护 这样唯一可以访问的客户 Solr 是你自己的。默认/示例 Solr 的安装允许任何客户端 可以访问它来添加、更新和 删除文档(当然还有 搜索/阅读),包括访问 Solr 配置和架构 文件和管理用户 接口。

即使是 ajax-solr,一个用于在浏览器中运行的 JavaScript 的 Solr 客户端,也建议通过代理与 Solr 通信

guardian.co.uk 为例:众所周知,他们使用 Solr 进行搜索,但他们构建了一个 API 来让其他人访问他们的内容。这样他们就可以定义控制他们希望人们搜索什么以及如何搜索。

否则,任何脚本小子都可以编写一个简单的循环来对您的 Solr 实例进行 DoS,从而导致您的站点瘫痪。


2
投票

您可能只需删除 solrconfig.xml 中定义 solr.XmlUpdateRequestHandler 的行即可。

复制是一种在能够进行索引的同时设置只读的好方法。只需设置一个具有受限访问权限的主服务器和一个只读的从服务器(通过从配置中删除 XmlUpdateRequestHandler)。从站将从主站复制,但不会直接接受任何索引。

更新

我刚刚读到,在 Solr 1.4 中,您可以禁用组件。我刚刚在 /update requestHandler 上尝试过,但无法再索引。


0
投票

不是最优雅的解决方案,但使用 Solr 7.2.1 我已将以下内容添加到 SolrConfig.xml,以将更新请求推送到 SearchHandler - 它们失败 - 有效地将索引呈现为只读 - 似乎有效,我是如果有的话,愿意接受更优雅的解决方案吗?

<!-- Bogus update handler - effectively makes index read-only -->
<requestHandler name="/update" class="solr.SearchHandler" />    
© www.soinside.com 2019 - 2024. All rights reserved.