我正在使用 apache-tomcat。我的 solr 在我的本地主机上工作正常。现在我想把它放到网上。在 apache-tomcat 中,在我的 bin 文件夹中,我把我的 solr dir 放在网上,我没有任何 bin 文件夹。所以谁能告诉我如何配置solr 在我的网络主机 dir.thanks 提前
问问题
983 次
1 回答
2
首先,通过要求身份验证来保护整个 tomcat web admin gui。首先,在/etc/tomcat6/tomcat-users.xml中新建一个用户
<tomcat-users>
<role rolename="admin"/>
<role rolename="manager"/>
<role rolename="proxyUsers"/>
<user username="jorno" password="XXXXX" roles="admin,manager,proxyUsers"/>
<user username="proxyUser" password="XXXXXX" roles="proxyUsers"/>
</tomcat-users>
在文件 /etc/tomcat6/web.xml 中添加安全约束
<security-constraint>
<web-resource-collection>
<web-resource-name>
Solr authenticated application
</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>solrUsers</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Basic Authentication</realm-name>
</login-config>
<security-role>
<description>solr users</description>
</security-role>
记得重启tomcat
/etc/init.d/tomcat6 restart
访问您的 tomcat solr 应用程序 web gui 并检查身份验证是否有效。
现在我们在 apache 中创建实际的代理。首先,创建一个简单的站点。需要 PHP。以下示例 vhost 将解决问题。注意重写。
q.example.com - Solr 搜索引擎代理
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/q.example.com
ServerName q.example.com
ServerAlias solr.example.com
AddDefaultCharset UTF-8
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
# REWRITES
RewriteEngine on
# Debug:
# RewriteLog /tmp/rwlog
# RewriteLogLevel 9
RewriteRule ^/([^/]+)/? /index.php [NC,L]
</VirtualHost>
记得重新加载apache
/etc/init.d/apache2 reload
现在在站点的根目录中创建一个 index.php 文件。根据您更新索引的频率,您可能希望让用户缓存代理的内容。我在这里设置了 5 分钟。
<?php
// Avvoid too long client cache
// calc an offset of 5 minutes
$offset = 60 * 5;
// calc the string in GMT not localtime and add the offset
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
//output the HTTP header
Header($expire);
// Write the result from solr
Echo file_get_contents('http://proxyUser:[password]@127.0.0.1:8080/solr/select?'.$_SERVER["QUERY_STRING"]);
?>
差不多就是这样。您现在可以像这样测试代理
http://q.example.com/select?q= %3A &indent=on
于 2013-07-24T13:42:23.990 回答