Web-Server

在生產中保護 Apache Solr

  • June 20, 2016

我正在設置 Apache Solr 4.1,它將用於為 Web 應用程序索引數據。只有 Web 應用程序才能訪問 Solr。使用者和其他客戶不會直接與 Solr 交談。

保護此類 Solr 設置的最佳實踐是什麼?

(我們使用 Jetty 來執行 Solr)

我知道您正在使用 Jetty,但我有一個使用 Tomcat 的方法,該方法有效,將在下面解釋。

基本上,我已經放棄嘗試理解我認為 Java Web 應用程序在 Jetty 和 Tomcat 中保護自己的過於遲鈍的方式。因此,我更喜歡讓 Apache 承擔起第一道防線訪問的重任。Apache 是可靠的。如果您覺得需要額外的安全性,您可以隨時安裝ModSecurity等工具以使其更加安全。

關鍵是像這樣在 Apache 中創建反向代理設置。將執行 Solr 的主機的 Apache 配置中的程式碼。我喜歡讓它從子目錄中執行,所以這個例子/solr用作ProxyPassandProxyPassReverse設置的例子。首先是在 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 進行限制。無論什麼效果最好。

引用自:https://serverfault.com/questions/473130