Solrの手前にApache(mod_proxy)置いたらハマった件

■ なぜApache?
 
ManifoldCFの環境をEC2上に作っていて、クロールしたデータをローカルのSolrに入れようとした場合に、
外から見たそれぞれの管理画面は、
– ManifoldCFが8345ポート
– Solrが8393ポート
ってことで、それなら手前にApache置いてURL的にもキレイな感じにしたいよね、と。
 
 
■ なぜmod_proxy?
 
ManifoldCFもSolrもデフォルトのexampleなアレだとJettyを使ってるわけなのですが、
ちょっとググっていくと、http://wiki.eclipse.org/Jetty/Tutorial/Apacheってとこで、mod_proxy推しですね、と。

The mod_proxy modules are superior in features,
maintained with apache httpd, support HTTP and AJP and has a rich load balancer.
We highly recommend using mod_proxy when using Jetty with apache.

 
んま、といいつつも、AJPとかバランサーとかの設定は今回は端折って、チャチャっとやります。
 
 
■ EC2(Ubuntu)にApacheとmod_proxyをインストール
 
Apacheは sudo apt-get install apache2 で入れておいたとして、
 
– ロードするモジュールが書いてある設定ファイルをシンボリックリンクで。

$ cd /etc/apache2/mods-enabled/
$ sudo ln -s ../mods-available/proxy.load proxy.load
$ sudo ln -s ../mods-available/proxy_http.load proxy_http.load

 
– proxy.confで設定できるように。

$ sudo a2enmod proxy
Enabling config file proxy.conf.
To activate the new configuration, you need to run:
  service apache2 restart

 
– 設定入れてAapche再起動してモジュールがロードされてることを確認

$ sudo vim /etc/apache2/mods-enabled/proxy.conf
<IfModule mod_proxy.c>
  ProxyRequests Off
  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>

  # searchだったらSolr
  ProxyPass /search/ http://localhost:8983/
  ProxyPassReverse /search/ http://localhost:8983/

  # crawlだったらManifoldCF
  ProxyPass /crawl/ http://localhost:8345/
  ProxyPassReverse /crawl/ http://localhost:8345/
</IfModule>

$ sudo service apache2 restart
 * Restarting web server apache2                                                                                                             [ OK ]

$ apachectl -M | grep proxy
 proxy_module (shared)
 proxy_http_module (shared)

 
 
■ Solrのインストール
 
Java入ってなかったので入れて、

$ java -version
The program 'java' can be found in the following packages:
 * default-jre
 * gcj-4.6-jre-headless
 * gcj-4.7-jre-headless
 * openjdk-7-jre-headless
 * openjdk-6-jre-headless
Try: sudo apt-get install <selected package>

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jre-headless

$ java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

 
Solrをダウンロードしてきて展開してstart.jar叩くだけの簡単なお仕事。

$ wget http://download.nextag.com/apache/lucene/solr/4.6.0/solr-4.6.0.tgz
$ tar xvf solr-4.6.0.tgz
$ cd solr-4.6.0/example/
$ java -jar start.jar

 
 
■ 画面から見てみるとSolrが何か変(EC2インスタンスをstop/startしたので画像のURL叩いてもアレなので悪しからず)
 
なんかクルクル回ったまんま何も出てこないし、、

明らかにCSS読み込めてないし、、

apacheのログみたら↓とか言ってるし、、

File does not exist: /var/www/solr

 
 
■ 解決策
 
ググってたら↓このAnswerが神でした。。
http://serverfault.com/questions/547010/solr-reverse-proxy-apache2
 
掻い摘んで言うと、
– 絶対パスになってるから静的コンテンツ系が読み込めてない
– proxy.confに 『ProxyPass /solr http://localhost:8983/solr』 を追加しなはれ
 
上記の設定入れたらイイ感じになりました!(んま、なんかちょっとアレですけど。。)
 
 

 

ということで、これからManifoldCFでクロールしてSolrにデータを投入していこうと思います。
もちろんManifoldCFの参考図書は↓こちらです。

[改訂新版] Apache Solr入門 ~オープンソース全文検索エンジン (Software Design plus)
大谷 純 阿部 慎一朗 大須賀 稔 北野 太郎 鈴木 教嗣 平賀 一昭
技術評論社
売り上げランキング: 6,873

コメント

タイトルとURLをコピーしました