スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Apache-Tomcat連携

自分で作った家計簿のWebアプリを自宅サーバーに載せたのだが、最初Apacheと連携させず、単体で8080で待ち受けるようにしていた。以前連携で苦労したことがあったため。

このアプリには携帯からもアクセスできるようにしたのだが、Vodafoneの携帯では8080や8443ではアクセスできない。キャリアのプロキシ、FWがhttpプロトコルで見ているのではなく、ポート番号で見ているので、そこでブロックされてしまう。3Gでも駄目。AccessInternetを使えば大丈夫だと思うが、2G端末から通るようにしたい。とすると、80、443で通じるようにしないといけない。

ということで設定してみた。Googleで「Apache Tomcat 連携」と入力してヒットしたサイトを参考にやろうとしたのだが、すでにバージョンが違っているため、その手順ではうまく行かない。
前やったときも手間取ったので、今回も手間取りそうだと思ったが案外簡単に行った。以下がその手順。

Apache: 1.3.29
Tomcat: 5.5
OS: Linux x86 (kernel 2.4.22)

■connectorのインストール
wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.15/jakarta-tomcat-connectors-1.2.15-src.tar.gz
tar xvfz jakarta-tomcat-connectors-1.2.15-src.tar.gz
cd jakarta-tomcat-connectors-1.2.15-src/jk/native
./configure --with-apxs=/usr/local/apache/bin/apxs
make
make install

cp ../conf/workers.properties /etc/httpd/conf/

■/etc/httpd/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so
AddModule mod_jk.c
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /xxx/* ajp13
JkMount /yyy/* ajp13

<Location "/xxx/WEB-INF/">
AllowOverride None
deny from all
</Location>

■/etc/httpd/conf/workers.properties
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/j2re1.4.2_10
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=/usr/java/j2re1.4.2_10/lib/i386/server/libjvm.so
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr

■/usr/local/tomcat/conf/server.xml
 Define a Coyote/JK2 AJP 1.3 Connector on port 8009
のコメントを外す。

これだけで80番も443も接続が完了した。案外ここは簡単に通過した。

しかし、SSLでは3Gでは警告が出てくるのだが、2G端末だとエラーとなって接続できない。有効期限もサイト名も一致しないのでそのせいかもしれないと思い、Apache付属の証明書をやめ、新たに作り直した。以下その手順(opensslがインストール済みの前提)。

#CA局作成
/usr/share/ssl/misc/CA -newca
#key作成
openssl genrsa -out ./serverkey.pem 1024
# openssl genrsa -des3 -out ./serverkey.pem 1024だとKeystoreのpasswordを求められ、Apacheが起動できない(回避策はあると思うが)。
#csr作成
openssl req -new -days 365 -key serverkey.pem -out csr.pem
#自前のCA局で署名
openssl ca -in csr.pem -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out cert.pem

#httpd.confに設定
SSLCertificateFile /etc/httpd/conf/cert.pem
SSLCertificateKeyFile /etc/httpd/conf/serverkey.pem

これでサーバ証明書の二つの問題(有効期限、Common Name)はクリア。しかし、認証局が自前なので、2G端末ではアウト。どうやらVerisignではないといけない模様。調べてみると、他のメジャーな認証局でもエラーになる場合もあるようだ。

SSLが駄目なので仕方なく平文で。
携帯サイトか通常のWebサイトかパスで判定して、dispatchあるいはRedirectしていたのだが、なぜかrequest.getRequestURL()の返す値が、WindowsとLinuxでは異なる。同じTomcat5.5なのだが、Linuxだとdispatchした値になってしまう(ブラウザのURL表示では、リクエストしたパスになっているにもかかわらず)。requestの他のメソッドを試してみたが、リクエストしたパスを取れるものは一つもなかった。
仕方なくUser-Agentで判定することに。最初からそうすればよかったが。(開発中はIEからテストしたいのでUser-Agentを使わなかったのだが、Firefoxであれば簡単にUser-Agentが切り替えられるので、Firefoxを使ってやればよかったのだが)

request.getHeader("User-Agent")

で、"Mozilla"があるかどうかで判定した。他にもPCの場合のUserAgentを考慮する必要があるが、とりあえず大体カバーできるのでこれでよいかと。(参考サイト

これで正しく携帯用のサイトが表示されたものの、まだ問題があった。2G端末だと、クッキーが使えない。URL rewritingしないといけなかった。最初、HTTP Error 408(Request timeout)が返ってきて何故かわからなかった。

ここは適宜リンクにresponse.encodeURL()をかませた。strutsタグ内では、ブラウザが対応しない場合勝手に付加される。

ようやく、2G端末からでもできるようになった。やれやれ。

関連記事
スポンサーサイト

trackback


この記事にトラックバックする(FC2ブログユーザー)

プロキシ

<BR> プロキシプロキシ (Proxy) とは「代理」の意味であるが、インターネット関連で用いられる場合は、特に内部コンピュータ・ネットワーク|ネットワークから外部のインターネットへの接続を行う際、高速なアクセスと安全な通信を確保するためのサーバプログラム、またはその

コメント

非公開コメント

mod_jk2でメイクインストールしてやってもうまくいかなかった。

リロードするたびに正常表示とエラーが繰り返される不安定状態。

なんでや~。

結局人からもらったmod_jk使ってやってる。

つまらん~。

今度やるときはここの記事参考にさせてもらいます。
プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。