hibomaのはてなダイアリー このページをアンテナに追加 RSSフィード

 | 

2009::07::05

[] apacheのtrunk版で mod_luaを動かして遊んでみたログ

apacheの2.4系から Luaでapacheのフックを制御できる mod_luaモジュールが入るというネタを見かけたので、svnのtrunk版(2.3.*) を引っ張って試してみました。

(元々 mod_wombatという名前で開発されてたモジュールが2.4系からはmod_luaとしてリリースされるって経緯ぽい。ドキュメントはこちら)

現状のmod_luaでサポートしてるApacheのフックは下記の通りになります。

  • ap_hook_translate_name
  • ap_hook_map_to_storage
  • ap_hook_header_parser
  • ap_hook_access_checker
  • ap_hook_check_user_id
  • ap_hook_auth_checker
  • ap_hook_type_checker
  • ap_hook_fixups
  • ap_hook_insert_filter(未実装)

これらのフックにLuaコードを噛ませていろいろ制御できる、という感じです。

ざっくり触った感じだと

  • Aapacheモジュールのプロトタイプすぐ作れるお手軽感
  • server_recとかconn_recはいじれない(ぽい)ので、本気な機能作るのだと どうなのかなっていう。
  • というあたりでシンプルな機能つくる時にはちょいちょい利用してみたい

という感想です。Luaのフットワーク軽さを生かしつつ使えという感じなんでしょうか


実際に入れてみるよ

( 以下はosxでの作業ログをまとめたものになります )

Lua入れる
  • Luaはportで入れる方法もあります

$ wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
$ tar xvfz lua-5.1.4.tar.gz       
$ cd lua-5.1.4                    
$ make macosx && sudo make install  

apacheのtrunk入れる

オプション適当


# mod_lua用 ( だったはず.. )
$ wget 'http://downloads.sourceforge.net/sourceforge/pcre/pcre-7.9.tar.bz2?use_mirror=jaist'
$ tar xvfj pcre-7.9.tar.bz2      
$ cd pcre-7.9          
$ ./configure && make  && sudo make install

$ svn checkout http://svn.apache.org/repos/asf/httpd/httpd/trunk httpd-trunk
$ cd httpd-trunk
$ svn co http://svn.apache.org/repos/asf/apr/apr/trunk srclib/apr
$ svn co http://svn.apache.org/repos/asf/apr/apr-util/trunk srclib/apr-util
$ ./buildconf
$ ./configure --with-included-apr --with-lua=/usr/local --enable-mods-shared=all --enable-lua --with-mpm=worker --enable-so
$ make -j2
 
テスト

とりあえず動くかどうかのテスト。ログに"hello, this is test_hook"と出てればok

  • httpd.conf

<LuaHookTranslateName test_hook>
function test_hook(r)
  r:info("hello, this is test_hook");
  return apache2.DECLINED
end
</LuaHookTranslateName>

セクションの中にLuaのコードを書けるのが新鮮ですね!


ホスト名に応じてDocumentRootをMySQLから引っ張ってきてマッピングするコード

これだけだとあまりに残念な紹介なんで、livedoorのいけべさんが昔公開されてたmod_vhost_mysqlの機能をmod_luaで真似してみます。以下の用な設定でいけます。


  • LuaからMySQL扱えるようにする

# luarocksとかいうrubyのgem的なツールを入れる
$ wget http://luaforge.net/frs/download.php/3981/luarocks-1.0.1.tar.gz
$ tar xvfz luarocks-1.0.1.tar.gz
$ cd luarocks-1.0.1
$ ./configure && make && sudo make install

# luaでmysqlするluasql.mysqlを入れる
$ sudo luarocks install http://luarocks.randomba.org/luasql-mysql-2.1.1.rockspec

  • httpd.conf
    • httpd.confにLuaのコードを書かないでLuaコードを任意のファイルに書くための設定

LuaRoot      /usr/local/apache2/scripts/lua
LuaCodeCache stat
LuaScope     once
LuaHookTranslateName mysql_vhost.lua mysql_vhost

  • /usr/local/apache2/scripts/lua/mod_vhost.lua
    • 実戦で使うならキャッシュとかいろいろ考えることあるけど、コンセプトってことでざっくり

require 'luarocks.require'
require 'luasql.mysql'

dbuser = "root"
dbname = "test"
dbhost = "localhost"
dbpass = nil

-- ここがエントリポイント
-- rは request_rec
function mysql_vhost(r)
   local root

   root = find_document_root(r.hostname)
   if root then
      r.filename = root .. r.uri
      return apache2.OK
   else
      r:err("DocumentRoot Not Found For " .. r.hostname)
      return 500
   end
end

-- mysqlからDocumentRoot引っ張ってくる
function find_document_root(hostname)
   local root, env, conn, cursor, row
   
   env    = assert(luasql.mysql())
   conn   = assert(env:connect(dbname, dbuser, dbpass, dbhost))
   cursor = conn:execute( string.format([[
      SELECT * FROM virtualhost where servername = '%s'
   ]], hostname))
   
   row = cursor:fetch({}, "a")
   if not row then
      return nil
   end
   return row.document_root
end

とりあえず生で!!!!!!!とりあえず生で!!!!!!! 2009/07/27 20:26
生挿入はムリって女の子でも「とりあえず生で」って言ってみたらウケて簡単に生で挿れさせてくれるなwwwwww
挿れてしまいさえすれば中出汁も余裕だし言ってみる価値ありすぎだろ?
まぁここの女は言わなくても100%生おkだけどwwwwwwwwww

http://netoge.bolar.net/7yYtY0r/

えふwwえふwwえふwwwえふwwえふwwえふwww 2009/08/11 04:10
ケイジの奴・・ネットやっててコレ知らないって何なのwwwwww
金に困ってるみたいだから教えてやったらソッコーでヤりやがったしww
てかあいつキモデブなのに何でいきなり8 万貰えてんの???
わけわかんねぇしwwwwwww

http://kachi.strowcrue.net/6jqYjnE/

ケ ツ コ キ!!!!!!!!!ケ ツ コ キ!!!!!!!!! 2009/08/17 21:48
すんげえケ ツでかい女に当たった!!! コイツのケ ツ 技すぎすぎwwwww

ケ ツにロ -ショ ン塗りたくって、俺のティ ヌコ挟んですんげー前後すんの!!!
前後してる時にク リに当たったりマ ヌ コに入ったりして
女もアヒアヒしまくりで俺も女も絶 頂しまくりで最高ですたwwwwwww

こりゃハマるわぁ・・・・

http://yuzo.plusnote.net/g3SYuJr/

くっちゃいの!くっちゃいの! 2009/08/23 23:31
3日お風呂入らずに来て!!って言われたから
我慢してその通りにしたんだが、行為を始めた途端に
チ ン カ スだらけの俺のテ ィ ン コを咥えてキレイにしてくれたわwwww

とりあえずされるがままでフィニッシュしたんだが、
ボーナス付けるとかイミフな事言われて8 万ゲットしたよ(^^;ラッキー♪

http://okane.d-viking.com/6SJwq6e/

もっとほしいです!!もっとほしいです!! 2009/08/28 11:50
とりま一回3 万って事で約束してたんだけど、
色々オモチャ使ったりビデオ撮ってあげたりしたら

1 0 万 貰 え た 件 wwwwwwwwww

やりたい放題するほど報 酬増えるとかマジキチwwwwww

http://koro.chuebrarin.com/xe5z07M/

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hiboma/20090705/1246804923
 |