dreamedge.net

アクセスログの出し方

2008-06-17T03:51:00+0000

/etc/tomcat5/server.xmlのEngine, Host, Contextタグの子要素として,AccessLogValveクラスのValveタグを作って設定する.デフォルトではLogger出力のPrefixがcatalina_になっているので,それに対応してaccess_とかしておくとわかりやすいかも.

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="access_"
       suffix=".log" />

ここもやっぱりValveをValueと書きやすいので注意.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

アクセスをIPで制限する

2008-06-17T03:49:00+0000

/etc/tomcat5/server.xmlのEngine, Host, Contextタグの子要素としてValveタグを設定するとおk.(server.xmlのパスはDebianデフォルトの場所)

アドレスで制限する場合は,

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="192.168.*.*, 127.0.0.*" />

ホスト名で制限する場合は,

<Valve className="org.apache.catalina.valves.RemoteHostValve"
       allow="*.hoge.org" />

といった感じ.

Java的なclass名表記の文化はなかなか慣れないところ.自分はValveをValueと書いて思いっきりハマったんだけど,タイプミスとかしないんだろうか?(IDEがそこら辺はなんとかしてくれる?)

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

Basic認証をする

2008-06-17T03:49:00+0000

server.xml, web.xml, tomcat-users.xmlの3つを変更しないといけなく,IP制限と比べてえらく面倒.

1. まずは/etc/tomcat5/server.xmlのEngine, Host, Contextタグの子要素として,Realmタグを設定する.デフォルトでEngineタグの子要素として記述されているので,基本的に変更しなくても大丈夫.

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
       debug="0"
       resourceName="UserDatabase" />

2. 次にGlobalNamingResourcesタグの子要素にResourceタグとResourceParamsタグを書いて,UserDatabaseの設定をする.これもすでに記述されていると思うので,pathnameのところでtomcat-users.xmlのパスを指定する位.デフォルトでは$CATALINA_HOME/conf/tomcat-users.xmlを見に行くことになっている.Debian的には/etc/tomcat5/tomcat-users.xml辺りに設定した方がよいような気がして変えてみたのだけど,”java.io.FileNotFoundException: /etc/tomcat5/tomcat-users.xml.new (Permission denied)”って怒られてうまくいかなかった.何で?

<Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
  <parameter>
    <name>factory</name>
    <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
  </parameter>
  <parameter>
    <name>pathname</name>
    <value>conf/tomcat-users.xml</value>
  </parameter>
</ResourceParams>

3. 上で設定したtomcat-users.xmlにrolename, username, passwordを設定する.基本的にはrolenameはbasicあたりを設定するのが分かりやすいのではないかと思います.デフォルトでいくつか作られているので,それをちょっといじって使ってもいいんじゃないでしょうか.

<tomcat-users>
  <role rolename="basic"/>
  <user username="user" password="passwd" roles="basic"/>
</tomcat-users>

4. 最後に/etc/tomcat5/web.xmlに実際に認証をかけるパス等の設定をする.web-appタグの子要素として,security-constraintタグとlogin-configタグを作成して,必要な部分を書き込む.\<url-pattern\>が認証をかけるURLの指定,\<auth-constraint\>が許可するrolenameの指定,\<auth-method\>が認証方式(今回はBASIC認証)の指定.

<security-constraint>
  <web-resource-collection>
    <web-resource-name>
      Authentication
    </web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>basic</role-name>
  </auth-constraint>
</security-constraint>

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>UserDatabaseRealm</realm-name>
</login-config>

5. あとは再起動すれば設定完了.
IP制限に比べて格段にややこしい設定になるのは何なんだろう.宇宙意志とかの仕業なんだろうか…….(なにやら拡張性とか云々とかに関するJavaの仕様らしい.)

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

etchでmod_jkを使う

2008-06-17T03:48:00+0000

素直にmodproxyajp使えよって話もあるけれど,過去の遺産とかの再活用の為にmod_jkを使用することに.以下,その時の記録.

# aptitude install libapache2-mod-jk
# a2enmod jk

で,modjkをインストール.modjkの設定ファイルは/etc/libapache2-mod-jk/にあるので,

workers.tomcat_home=/usr/share/tomcat5
workers.java_home=/usr/lib/jvm/java-1.5.0-sun

等に設定する.(普通にtomcat5モジュールを入れている場合は,javaはgijが入っているはずなので注意)

このままだとapache2のJk設定が出来ていないので,/etc/apache2/conf.d/mod_jkとかいうファイルを作って,以下のような内容を書いておく.

<IfModule mod_jk.c>
    JkWorkersFile /etc/libapache2-mod-jk/workers.properties
    JkLogFile /var/log/apache2/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkMount /test ajp13_worker
    JkMount /test/* ajp13_worker
</IfModule>
このエントリーをはてなブックマークに追加
Bookmark this on Delicious

公開用サブディレクトリの作成

2008-06-17T03:42:00+0000

apacheのユーザディレクトリ(http://host.com/~uname)みたいのを作りたければ,/etc/tomcat5/server.xmlの<Context>タブをいじる.

<Context path='' docBase='ROOT' debug='0'/>;

とか,

<Context path='/hoge' docBase='hoge' debug='0' reloadable='true'/>

とかする.
pathはhttp://host.com/以下のパスの設定.docBaseはローカルでそのフォルダを置いている場所.上の例だと,${catalina.home}/webapps/TmsServer/hoge (Debianデフォルトだと/usr/share/tomcat5/webapps/hoge)の内容が,http://host.com/hoge/に公開されることになる.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious