DSpace:Solr webapp 显示 "UnknownHostException"

DSpace: Solr webapp shows "UnknownHostException"

我正在尝试在本地 VM 上设置 DSpace 5.4,以准备在另一台机器上升级到 DSpace 5.5。

安装程序工作正常,但我无法让 solr webapp 工作。我部署了它(在 OpenSuse Leaf 42.1 上使用 Tomocat 8.0.33 和 OpenJDK 1.8.0_60),当从 VM 和主机调用时它返回以下错误:

java.net.UnknownHostException: linux-ai1n: unknown error
    java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    java.net.InetAddress.lookupAllHostAddr(InetAddress.java:928)
    java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
    java.net.InetAddress.getLocalHost(InetAddress.java:1500)
    org.dspace.solr.filters.LocalHostRestrictionFilter.doFilter(LocalHostRestrictionFilter.java:38)

所以在使用发现相关函数时,返回了这个错误:

Expected mime type application/octet-stream but got text/html.

我发现的答案只建议更改 solr URL,所以我尝试从 http://localhost:8080/solr/search to http://127.0.0.1:8008/solr/search 更改 config/modules/discovery.cfg 中的 solr URL,但确实如此不能解决问题。

任何提示接下来要检查的内容都会非常有帮助。这可能是虚拟机上可用内存不足的问题吗?

  • 我要做的第一件事是检查是否实际部署了 SOLR。 tomcat 中是否有用于 solr 部署的上下文文件?在 [tomcat-文件夹]/conf/Catalina/localhost 下查看。您应该有一个用于 xmlui/jsp 部署的 .xml 文件和一个用于 solr 部署的文件。

  • 如果solr部署正确,检查是否可以通过浏览器自行访问。本地主机:port/solr/.

这可能是 /etc/hosts 的问题。 如果 /etc/hosts 不包含主机名的定义,它将失败。 尝试将 linux-ai1n 添加到主机文件中,例如

127.0.0.1 localhost linux-ai1n

与 DSpace 一起安装的 Solr Web 应用程序在其默认配置中使用过滤器 org.dspace.solr.filters.LocalHostRestrictionFilter 拒绝来自本地主机的安全请求。过滤器在 Solr 的 web.xml 中定义,它位于 [dspace]/webapps/solr/WEB-INF/web.xml

您可以通过从 web.xml 中删除以下行来完全删除此过滤器:

<!-- Any path (name) registered in solrconfig.xml will be sent to that filter -->
<filter>
  <filter-name>LocalHostRestrictionFilter</filter-name>
  <filter-class>org.dspace.solr.filters.LocalHostRestrictionFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>LocalHostRestrictionFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

或者,将以下内容添加到 web.xml 以配置过滤器以允许所有请求,包括那些不是来自本地主机的请求。

<!-- Limit access to solr webapp.
  'true': allow requests from localhost only.
  'false': allow requests from all remotes. -->
<context-param>
  <param-name>LocalHostRestrictionFilter.localhost</param-name>
  <param-value>false</param-value>
</context-param>

如果您执行这两项中的任何一项,我强烈建议您通过其他方式限制对 Solr 的访问。就个人而言,我已将以下内容添加到位于 ${catalina.base}/conf/Catalina/localhost/solr.xml 的 solr 上下文文件中:

<Valve
  className="org.apache.catalina.valves.RemoteAddrValve"
  allow="127\.0\.0\.1|::1|0:0:0:0:0:0:0:1|192\.168\.1\.\d+"
/>

这将允许来自本地主机和本地子网的访问。有关详细信息,请参阅 https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html 中标题为 访问控制 的部分。