ICON of RYUUO.COM TradeMark

Tomcat & Apache

会員登録(SSL)
会員専用(SSL)


更新日: ??????
FedoraCore3でのTomcatとApacheとの連携についての説明。日本語では実戦的な説明がなされていないようなので恥ずかしながら記載した。多少なりとも参考になれば幸せです。また、爺の説明ですので思い出しながら記載しました。抜けが無いか見直してはおりますがお気付きの点がございましたらご連絡下さい。
また、tomcatでcgi を使用する方法を載せました。





インストールに関して

javaのインストール

http://java.sun.com/j2se/1.5.0/ja/download.htmlからダウンロードするのですが、プラットフォームの違い、CPUの種類など、自分の環境にあったjdkをdownloadしてください。
ちなみに、私の場合には自己解凍バイナリファイル
jdk-1_5_0_09-linux-i586.bin
です。downloadするときにはライセンス規約への同意が必要ですのでyesで進みます。
また、RPMパッケージも用意されています。installの方法に付いても詳しく説明されているのでそちらを参考。
以下の説明では、自己解凍バイナリファイルに於いての説明です。

また、Linuxではgccがjavaをサポートしていてjava programをコンパイル出来る。
詳しくは
$ man gcj
ちなみに、classを生成するときのコマンドは
$ gcj -C ****.java
Linuxに於いてjdkが必要不可欠なのか今のところ正確には分らない。



tomcatのinstall
http://tomcat.apache.org/のページからDownLoad Tomcat 5.xのページへ進み、Binary DistributionsのCoreから
apache-tomcat-5.5.20.tar.gz
をdownloadする。


installする場所に付いて
各自の思うままにinstallすれば良い。参考までに。
今後のVersionUpに備えて
# mkdir /opt
# mkdir /opt/original
installしたjdkとtomcatとをoriginalディレクトリにinstallし、
# ln -s /opt/original/jdk-1_5_0_09 /opt/jdk
# ln -s /opt/original/apache-tomcat-5.5.20 /opt/tomcat
と、リンクを張りあとは環境パスを設定する。

# emacs /etc/profile &
# JAVA & JDK
export JAVA_HOME=/opt/jdk
export CATALINA_HOME=/opt/tomcat
export CLASSPATH=.:
$CATALINA_HOME/common/lib/servlet-api.jar:
$CATALINA_HOME/common/lib/jsp-api.jar:
$CATALINA_HOME/common/lib/utilities.jar:
$CATALINA_HOME/webapps/(examples)/WEB-INF/classes:


export CLASSPATH=.: の部分は、実際は一行で記述する。



# PATH <- 他の bin directoryに同じコマンドがあるかも知れないので注意
# 以下の環境変数は好みにより削除しても問題ない。
export PATH=${PATH}:${CATALINA_HOME}/bin:${JAVA_HOME}}/bin


# ここは必要 # source /etc/profile
#



tomcatの確認
# ${CATALINA_HOME}/bin/startup.sh
PATHを通している場合には
# startup.sh

以下のURLから確認
http://localhost:8080/
表示されれば、一安心!




後は、apacheとtomcatとの連携
apacheとtomcatが会話するには、mod_jkかmod_jk2が必要。

# yum install mod_jk

FedoraCore6ではmod_jkが見付からなかったので、source fileからInstallする。

http://tomcat.apache.org/ より
Tomcat ConnectorsのDownLoadよりtomcat-connectors-1.2.25-src.tar.gzを。

$ tar xfvz tomcat-connectors-1.2.25-src.tar.gz

$ cd tomcat-connectors-1.2.25-src/native

$ find /usr -name apxs
/usr/sbin/apxs
apxsが見当たらない場合はhttpd-develがinstallされていない場合がある。
$ yum install httpd-devel

$ ./configure --with-apxs=/usr/sbin/apxs

$ make  <---(失礼! ./は必要ありませんでした:2008/03/09)

# su
# cp apache-2.0/mod_jk.so /etc/httpd/modules

mod_jk Install後、workers.propertiesを、/etc/httpd/conf.d/にコピーする。

DownLoadしたsource file内のconf Directoryにworkers.propertiesがあるか...以下はyumでInstall できた場合。

# cp /usr/share/doc/mod_jk-ap20-1.2.8/mod_jk.conf.sample /etc/httpd/conf.d/mod_jk.conf
# cp /usr/share/doc/mod_jk-ap20-1.2.8/workers.properties.sample \
/opt/original/apache-tomcat-5.5.20/conf/workers.properties



と、コピーした後Fileを修正する。
# editor /opt/original/apache-tomcat-5.5.20/conf/workers.properties
# OPTIONS ( very important for jni mode )

#
# workers.tomcat_home should point to the location where you
# installed tomcat. This is where you have your conf, webapps and lib
# directories.
#
workers.tomcat_home=/opt/tomcat <--設定した内容にあわせる。

#
# workers.java_home should point to your Java installation. Normally
# you should have a bin and lib directories beneath it.
#
workers.java_home=/opt/jdk <--設定した内容にあわせる。

#
# You should configure your environment slash... ps=\ on NT and / on UNIX
# and maybe something different elsewhere.
#
ps=/

#
# 以下は、ajp13を使用するのでその部分はコメントにしない
#




# editor /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk.so

JkWorkersFile /opt/tomcat/conf/workers.properties <-- リンクを張った場所

JkLogFile logs/mod_jk.log
JkLogLevel info
JkShmFile logs/jk-runtime-status


#
# Root context mounts for Tomcat
#
#JkMount /*.jsp ajp13
JkMount /(examples)/* ajp13
(examples)の部分は、${CATALINA_HOME}/webapps内の任意のディレクトリ


Directoryの設定で、Order deny,allow, deny from allが無くても404を返してくる。はっきりした時点で修正する!


<Directory "/*/WEB-INF/*">
AllowOverride None
Order deny,allow
deny from all

</Directory>

<Directory "/*/META-INF/*">
AllowOverride None
Order deny,allow
deny from all
</Directory>

#
# 以下の部分は httpd.confのaliasなどの設定と同じなので各自で直す。
# 私の場合には手をつけなかった。
#



/opt/tomcat/conf/server.xml の修正


# emacs ${CATALINA_HOME}/conf/server.xml

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />




最終確認
# ${CATALINA_HOME}/bin/shutdown.sh
# ${CATALINA_HOME}/bin/startup.sh

http://localhost/(examples)/
https://localhost/(examples)/
で、確認できる。




cgiの使用(apache-tomcat-5.5.23)

tomcatでcgiを使用する

ここの内容は試験的に行なったものです。

# cd ${CATALINA_HOME}/server/lib
# mv servlets-cgi.renametojar servlets-cgi.jar

# cd ${CATALINA_HOME}/webapps/{example}/WEB-INF
# mkdir cgi



${CATALINA_HOME}/conf/web.xmlを変更するか、webapps以下のディレクトリ内のweb.xmlを変更するかのどちらかですが、前者はwebapps以下のすべてのディレクトリ内に働き、後者はwebapps以下の一つのディレクトリ内だけに働きます。どちらの web.xmlを修正するかはご自由に。

# editor web.xml
<!-- Servlet Declaration -->


<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>


<!-- Servlet Mapping -->


<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>




${CATALINA_HOME}/conf/web.xmlを修正するときはコメントを外すだけです。また、webapps内のweb.xmlを修正するときは、${CATALINA_HOME}/conf/web.xmlのcgiの部分をコピーペーストしました。

後は、先ほど作ったディレクトリでcgi(default: perl)が働きます。これで終了なのですが、このままですと、
http://localhost:8080/{example}/cgi-bin/bbs.cgi
で表示できますが、mod_jkを利用している場合には、
http://localhost/{example}/cgi-bin/bbs.cgi
で表示できない場合があります。

これはいままでapacheを使用しcgiも使用していた場合で、
/etc/httpd/conf/httpd.conf の以下をコメントにしなければなりません。


#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

#AddHandler cgi-script .cgi


以上で、
http://localhost/{example}/cgi-bin/bbs.cgi
で表示できるようになりました。



シンボリック・リンクの使用(apache-tomcat-5.5.23)

シンボリックを有効にする

$ emacs ${CATALINA_HOME}/conf/context.xml
<!-- The contents of this file will be loaded for each web application -->
<Context allowLinking="true">

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml<!/WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<!--
<Manager pathname="" />
-->

</Context>




Virtual Host(Solaris上での実験)

/etc/hosts の内容(一部分)

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1	localhost.localdomain localhost heike genji
::1		localhost.localdomain localhost

VirtualNameがチョッとダサいですが。Solarisでは再起動する毎のhostsが書き換えら
れるので、127.0.0.1の部分にVirtualName(平家・源氏)を加えた。



httpd.conf の内容(一部分)

#Listen 12.34.56.78:80
Listen 80

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

Include conf/mod_jk.conf

#ServerName www.example.com:80
ServerName 192.168.1.77

VirtualNameの設定はmod_jk.conf内で行ったので、httpd.conf内のVirtualNameの設定
はすべてコメントにしてある。





mod_jk.conf の内容(一部分)

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /export/tomcat/conf/workers.properties


JkShmFile logs/jk-runtime-status
JkLogFile logs/mod_jk.log
JkLogLevel info


#
#  Deny direct access to WEB-INF and META-INF
#
<Location "/*/META-INF/*">
Order deny,allow
deny from all
</Location>

<Location "/*/WEB-INF/*">
Order deny,allow
deny from all
</Location>



NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /export/tomcat/webapps/heike
ServerName heike
JkMount  /* ajp13
JkMount  /*.jsp ajp13
</VirtualHost>


<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /export/tomcat/webapps/genji
ServerName genji<
JkMount  /* ajp13
JkMount  /*.jsp ajp13
</VirtualHost>



server.xmlの内容(一部分)



      <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

        <!-- Defines a cluster for this node,
	---------- 略 ---------
	---------- 略 ---------
	---------- 略 ---------

                 pattern="common" resolveHosts="false"/>
        -->

      </Host>

      <Host name="heike" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
	<Context path="" docBase="/export/tomcat/webapps/heike"
		 debug="0" reload="true" />
      </Host>


      <Host name="genji" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
	<Context path="" docBase="/export/tomcat/webapps/genji"
		 debug="0" reload="true" />
      </Host>




後は、httpdとCatarinaを再起動してプラウザから
http://heike/
http://genji/
で、表示されると思います。


うまく機能しない場合にはLogFileを検査してみて、以上で終りです。為になりましたでしょうか?


独り言・雑談

mysqlにConnection出来ない。and 文字化け

OS : FedoraCore 6
mysql : Version 5.0.27
apache-tomcat: Version 5.5.20 and 5.5.26
以上の条件で実験的に行った時の記録

なかなか、mysqlとConnection出来ず。そこで、検索でいろいろ調べたところ、aspectjrt-1.2.1.jarにブチ当たった。これをdownloadし、$CLASSPATHに設定し行うと確かにconnectionの確立が出来る。しかし、aspectjrt-1.2.1.jarはダメ!、必要ないとBBSに載っていたので、諦めることにした。......が、どう言う訳か$CLASSPATHから削除してもConnectionが確立できるようになっていた。不思議だが嬉しい! しかし、依然として文字化けが起こっている。文字化けは以下の手順で修正できた。ここまで、二日間かかった。疲れた。

# edit /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8   <--Add

[client]
default-character-set=utf8   <--Add
     
[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


# /etc/init.d/mysqld restart
MySQL を停止中:                                            [  OK  ]
MySQL を起動中:                                            [  OK  ]
#

# mysql -u root -p(passwd)
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> exit
Bye
$ mysqladmin -u root -p CREATE sample
Enter password:

$ mysql -u root -p(passwd) sample < sample.sql

# ${CATALINA_HOME}/bin/startup.sh
Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:       /opt/jdk
#