前面 Solr 教學 (1) – 安裝篇Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面 講解了 Solr 安裝方式以及頁面安全性設定,這篇文章要記錄透過 tomcat 7 內建的 Remote Address Filter 來設定允許連線 IP 的白名單。

這個方法非常簡單,不過要注意的是 tomcat 版本不同會有不同的設定方法,這邊小蛙的環境是 Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7,以下的方法僅適用於 tomcat 7 這個版本!
在測試這個功能的時候發生一個小插曲,以往設定完馬上就可以用了,這次測試時不管怎麼做都會出現 403 Forbidden 的錯誤,簡直是晴天霹靂,完全摸不著頭緒,已經設定好小蛙自己使用的 IP,還是一樣 403,最扯的是 127.0.0.1 本機測試也還是一樣的情況,在資訊這行經常會遇到靈異現象,可能要買一包綠色乖乖才可以,不過 VPS 主機在美國要怎麼辦呢 …
後來 … 突然想到一件事情,小蛙的網站有使用 CloudFlare 這個服務來加快網頁速度,CloudFlare 會根據使用者的設定,比如原本的 http://wazai.net/ 假設連結到小蛙的 IP (1.2.3.4),這個 1.2.3.4 的 IP 是在美國紐約,現在有一個日本來的使用者連結了 http://wazai.net,此刻 CloudFlare 發現日本這邊也有一個 CloudFlare 伺服器,就會將日本的使用者連結到日本的 CloudFlare 伺服器以加快網站速度。
就在這個 moment,真正連到小蛙伺服器的 IP 就變成 CloudFlare 日本伺服器的 IP,而不是真正日本使用者的 IP,當然這邊 CloudFlare 也有提供自訂的 Header 可以取得原始日本使用者的 IP。
到這邊大概懂了 … 竟然被那麼奇怪的問題卡了那麼久 … 就是小蛙在測試的時候,也是連結 http://domain:8080/solr ,但真正收到的 IP 卻不是小蛙自己本身的 IP,而是接近小蛙位置的 CloudFlare Server IP,就連在本機 127.0.0.1 的時候也是一樣的狀況 … CloudFlare 為了避免這個問題,可以在網站上設定可以直接連接的 Domain,例如:domain 透過 CloudFlare,額外新增設定 nocf.domain 來避免使用 CloudFlare。
上教學!有兩種設定方式,一種是 Apache Tomcat 官網範例 提到的透過 web.xml 設定 <filter>,第二種是直接在 <Host> <Context> 等 Catalina Container 中設定。

透過 <filter>

  1. <filter> 過濾器在每個專案下的 web.xml 中設定,在 <web-app> </web-app> 之間加入 <filter> 設定,IP 的部分設定為 1.2.3.4 改寫成 1\.2\.3\.4,IP 與 IP 之間以「|」分隔。
    # vim /var/lib/tomcat7/webapps/solr/WEB-INF/web.xml
    <filter>
      <filter-name>Remote Address Filter</filter-name>
      <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
      <init-param>
        <param-name>allow</param-name>
        <param-value>127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>Remote Address Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
  2. 設定完成!重新啟動 tomcat。

透過 <Context>

  1. 進入到 solr 個別設定檔,在 <Context> </Context> 之間加入 <Value />
    # vim /var/lib/tomcat7/conf/Catalina/localhost/solr.xml
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
            allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
  2. IP 設定規則同 <filter> 第一點。
  3. 設定完成!重新啟動 tomcat。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *