我正在尝试将 Apache2 设置为 solr 的反向代理。Apache 和 Solr 位于同一台机器上。Apache 还作为常规 Web 服务器提供其他服务。
solsearch 配置文件/etc/apache2/config.d/
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /solrsearch http://localhost:8983/solr/collection1/browse
ProxyPassReverse /solrsearch http://localhost:8983/solr/collection1/browse
现在尝试http://localhost/solsearch给我第一页http://localhost:8983/solr/collection1/浏览,但布局损坏(如缺少 CSS)。
error.log
Apache 的结果:
File does not exist: /var/www/solr, referer: [http://192.168.1.150/solrsearch]
答案1
HTML 内容页面中 CSS 和其他文件的链接可能是绝对路径 - 因此它们链接到/solr/path/to/css
而不是path/to/css
。
您应该能够通过添加另一个来解决这个问题ProxyPass
:
ProxyPass /solrsearch http://localhost:8983/solr/collection1/browse
ProxyPassReverse /solrsearch http://localhost:8983/solr/collection1/browse
ProxyPass /solr http://localhost:8983/solr
但是,如果这是一个公开可用的服务器,您应该小心,不要暴露比您想要暴露的更多的内容。
答案2
只是为了在这里添加标签。以下代理配置允许默认 Solr 浏览器运行(使用 CSS、javascript 等)没有授予访问管理功能的权限:
<IfModule mod_proxy.c>
# Proxy specific settings
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# permit:
# * queries
# * javascript
# * css
# * term vectors
# restrict:
# * all other traffic (admin, etc)
ProxyPassMatch "/solr/(.*/browse)" http://localhost:8983/solr/$1
ProxyPassMatch "/solr/(.*/terms)" http://localhost:8983/solr/$1
ProxyPassMatch "/solr/(.*/admin/file)" http://localhost:8983/solr/$1
ProxyPass /solr/js http://localhost:8983/solr/js
ProxyPassReverse /solr http://localhost:8983/solr
</IfModule>
这在我的 Solr 6.1.0 系统上运行。