在生產中保護 Apache Solr
我正在設置 Apache Solr 4.1,它將用於為 Web 應用程序索引數據。只有 Web 應用程序才能訪問 Solr。使用者和其他客戶不會直接與 Solr 交談。
保護此類 Solr 設置的最佳實踐是什麼?
(我們使用 Jetty 來執行 Solr)
我知道您正在使用 Jetty,但我有一個使用 Tomcat 的方法,該方法有效,將在下面解釋。
基本上,我已經放棄嘗試理解我認為 Java Web 應用程序在 Jetty 和 Tomcat 中保護自己的過於遲鈍的方式。因此,我更喜歡讓 Apache 承擔起第一道防線訪問的重任。Apache 是可靠的。如果您覺得需要額外的安全性,您可以隨時安裝ModSecurity等工具以使其更加安全。
關鍵是像這樣在 Apache 中創建反向代理設置。將執行 Solr 的主機的 Apache 配置中的程式碼。我喜歡讓它從子目錄中執行,所以這個例子
/solr
用作ProxyPass
andProxyPassReverse
設置的例子。首先是在 URL 中添加斜杠的設置,以便呼叫http://my.server.is.great/solr
被翻譯成http://my.server.is.great/solr/
# Settings for adding a trailing slash to the URL RewriteEngine On RewriteCond %{REQUEST_URI} ^/(solr)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]
現在來了
mod_proxy
將 Tomcat Web 應用程序路由到 Apache 前端的魔法。# Settings for Solr in Apache <IfModule mod_proxy.c> # Proxy specific settings ProxyRequests Off ProxyPreserveHost On <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyPass /solr http://localhost:8080/solr/ ProxyPassReverse /solr http://localhost:8080/solr/ </IfModule>
此時,我將重新啟動 Apache 並查看它是否有效。如果是這樣,一切都很好!現在最後一步是進入 Tomcat XML 文件並通過添加到連接器來限制 Solr 僅響應
localhost
/請求。127.0.0.1``address="127.0.0.1"
<Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
現在是最後一部分?也許這就是你所需要的。也許您只是希望它
address="127.0.0.1"
成為需要訪問的一台機器的機器 IP。但是你又在使用 Jetty,所以也許有一種等效的方法來限制 Jetty 中的一個 IP?或者您甚至可以通過 Apache 配置中的 IP 進行限制。無論什麼效果最好。