すろっくさんです。
会社のテックリさんが
「ねえねえすろっくさんmrubyくわしい? むしろh2oくわしい? じゃあ年明けからめっちゃレビューだすからよろぴく!」
などと無茶振りお願いされたので年明けからずっとh2oを調査検証してました。近々ブログサーバのお引越しもあるので、ちょうどいいタイミングだしnginxからの乗り換えも見越してやってみるかと。
まずは基本これを改造していきます。
user: www
listen:
port: 80
hosts:
"0.0.0.0":
paths:
"/":
file.dir: /var/www/html
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
レスポンス。まあこんなもんかなあ。
[root@localhost h2o]# curl http://127.0.0.1
Welcome to H2O - an optimized HTTP server
It works!
mrubyとかつかってみる。
user: www
listen:
port: 80
hosts:
"0.0.0.0":
paths:
"/":
## ここから追加
mruby.handler: |
Proc.new do |env|
[200, {'content-type' => 'text/plain'}, ["h2o in mruby work!\n"]]
end
## ここまで
file.dir: /var/www/html
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
さっきのindex.htmlじゃなくてmrubyでかいた200がかえります。h2oはデフォルトでmruby使えます。いいですね。ちなみにyumでいれました。
[root@localhost h2o]# curl http://127.0.0.1
h2o in mruby work!
PHPとか実行したいので、さっきのmrubyは消して設定追加します。PHP実行のバックエンドはApache + mod-phpでもphp-fpmでも好きなものを用意してください。
<pre>
<code>
user: www
listen:
port: 80
## ここから追加
file.custom-handler:
extension: .php
fastcgi.connect:
host: <PHPのバックエンド>
port: <PHPのバックエンドのポート>
type: tcp
## ここまで
hosts:
"0.0.0.0":
paths:
"/":
file.dir: /var/www/html
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
</code>
</pre>
適当なPHPファイルをドキュメントルートの下におきます。
print("Hello This PHPer Site.\n");
PHPがかえります。いいですね。
[root@localhost h2o]# curl http://127.0.0.1/index.php
Hello This PHPer Site.
ただh2oはデフォルトだとnginxとApacheみたいに末尾がhtmlがついたものをメインのインデックスファイルとしてみています。これをindex.phpにしたいなあ、ってときは明示的にindex.phpが最初に参照されるようにします。
user: www
listen:
port: 80
file.custom-handler:
extension: .php
fastcgi.connect:
host:
port:
type: tcp
## これ追加
file.index: [ 'index.php','index.html' ]
## ここまで
hosts:
"0.0.0.0":
paths:
"/":
file.dir: /var/www/html
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
これでindex.phpなしでアクセスしてもindex.phpがかえります。いいですね。
[root@localhost h2o]# curl http://127.0.0.1/
Hello This PHPer Site.
さわりとしてはこんな感じですかね。なかなか設定ファイルわかりやすくていいです。設定項目一通り調べましたが、しんどいこともだいぶなくていいなと思いました。
調査検証してたら膨大な量になったのでここではさわりだけ。続きはまた。