Apache HTTP Server 2.4.1 on Ubuntu

Apache HTTP Server 2.4.1 を Ubuntu 10.04 LTS (Sakura VPS 512MB)に入れてみました。
今回試したかったことは、

  • Ubuntu(64bit)に入れる
  • mod_luaを使う
  • luaはソースコンパイルで組み込む(5.2を試したいため > が、失敗。後述)
  • mod_sedを使う

です。


必要となるパッケージをインストール

aptitude install libreadline6-dev  # for lua
aptitude install gcc
aptitude install libpcre3 libpcre3-dev 
aptitude install openssl libssl-dev

必要となるソースをダウンロード・展開

cd /usr/local/src
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
tar zxf lua-5.1.5.tar.gz
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/httpd-2.4.1.tar.gz
tar zxf httpd-2.4.1.tar.gz
wget http://ftp.riken.jp/net/apache//apr/apr-1.4.6.tar.gz
tar zxf apr-1.4.6.tar.gz
wget http://ftp.riken.jp/net/apache//apr/apr-util-1.4.1.tar.gz
tar zxf apr-util-1.4.1.tar.gz

Lua5.1 コンパイル・インストール

  • 最新の5.2を導入したかったが、ApacheModuleとしてうまく動かなかったため5.1.5で導入
  • /usr/local/lua へインストール
cd ./lua-5.1.5
64bitOSの場合は src/Makefile を修正する (参考)
  • (org)-> CFLAGS= -O2 -Wall $(MYCFLAGS)
  • (new)-> CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
コンパイル・インストール
make linux
make install INSTALL_TOP=/usr/local/lua

apr/apr-util コンパイル・インストール

  • httpd-2.4.1 の依存ライブラリであるaprを導入
  • /usr/local/apr へインストール
  • aptitudeで導入しても問題ないと思われる
cd ./apr-1.4.6
./configure --prefix=/usr/local/apr
make
make install
cd ..
cd ./apr-util-1.4.1
./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr
make
make install

httpd-2.4.1 コンパイル・インストール

  • /usr/local/apache24 へインストール
  • mod_ssl / mod_proxy* / mod_lua の有効化
  • soとしてモジュール生成
cd ..
cd ./http-2.4.1
./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-lua=/usr/local/lua --enable-so --enable-ssl=shared --enable-proxy=shared --enable-lua
make
make install
/usr/local/apache24/bin/apachectl start

mod_lua を試す

/usr/local/apache24/conf/httpd.conf を編集(以下の2行を追加)
 LoadModule lua_module modules/mod_lua.so
 AddHandler lua-script .lua
/usr/local/apache24/htdocs/example.lua を新規作成 (参考)
require "string"

function handle(r)
    r.content_type = "text/plain"
    r:puts("Hello Lua World!\n")

    if r.method == 'GET' then
        for k, v in pairs( r:parseargs() ) do
            r:puts( string.format("%s: %s", k, v) )
        end
    elseif r.method == 'POST' then
        for k, v in pairs( r:parsebody() ) do
            r:puts( string.format("%s: %s", k, v) )
        end
    else
        r:puts("unknown HTTP method " .. r.method)
    end
end
変更の反映
/usr/local/apache24/bin/apachectl configtest
/usr/local/apache24/bin/apachectl stop
/usr/local/apache24/bin/apachectl start
luaの動作確認 (ブラウザから /example.lua へアクセスし、以下が表示されることを確認)

Hello Lua World!

mod_sed を試す

/usr/local/apache24/conf/httpd.conf を編集
<Directory "/usr/local/apache24/htdocs/sed"> 
AddOutputFilter Sed html 
OutputSed "s/TAITO/ZUNTATA/g" 
OutputSed "s/SEGA/SST/g" 
OutputSed "s/FALCOM/JDK/g" 
</Directory> 
/usr/local/apache24/htdocs/sed/example.html を新規作成
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
  <title>sed sample</title>
</head>
<body>
  KONAMI<br/>
  TAITO<br/>
  SEGA<br/>
  GEMADELIC<br/>
  T&amp;E<br/>
  FALCOM1.6.0<br/>
</body>
</html>
変更の反映
/usr/local/apache24/bin/apachectl configtest
/usr/local/apache24/bin/apachectl stop
/usr/local/apache24/bin/apachectl start
mod_sed の動作確認 (ブラウザから /sed/example.html へアクセスし、以下が表示されることを確認)

KONAMI
ZUNTATA
SST
GEMADELIC
T&E
JDK1.6.0

備考:Lua 5.2.0 について

Lua 5.2.0 のコンパイル・インストール、および httpd-2.4.1 のコンパイル・インストールまでは問題ないが、LoadModule で mod_lua.so を有効にしようとすると以下のエラーが発生した
/usr/local/apache24/bin/apachectl configtest
httpd: Syntax error on line 148 of /usr/local/apache24/conf/httpd.conf: Cannot load /usr/local/apache24/modules/mod_lua.so into server: /usr/local/apache24/modules/mod_lua.so: undefined symbol: lua_objlen
  • 5.1.5 で同様の手順を行った場合にはエラーが発生しなかった