h2o and php

24
H2OPHPの話

Upload: junichi-ishida

Post on 09-Jan-2017

3.040 views

Category:

Software


0 download

TRANSCRIPT

Page 1: H2O and php

H2OとPHPの話

Page 2: H2O and php

who am i ?

UZULLAPHPerHachioji.pm「メールフォームを書いて生活」

Page 3: H2O and php

H2Oについて• the optimized HTTP/1, HTTP/2 server

• https://github.com/h2o/h2o

• @kazuho さん作• YAPC::Asia Tokyo 2015でのHTTP2のトーク• http://yapcasia.org/2015/talk/show/

dead6890-09b7-11e5-998a-67dc7d574c3a

Page 4: H2O and php

長所• HTTP2を早速サポートしている• 「デフォルトで」高速に動作する• 日本人が作っている(!)• PHPとの親和性がある気がしないでもない

Page 5: H2O and php

短所(?)

• ググれない• まだ事例が少ない• GithubのコードとISSUEを読もう• 「そうだ、本人に聞こう」

• 機能の数はちょっと少ない(nginxやApacheに比べて、相手が悪い)

Page 6: H2O and php

PHPとの関係は?• 本来特にない!• ファイル拡張子でハンドラ指定できる• fastCGIが使える• "fastcgi.spawn"

Page 7: H2O and php

PHPerとしては• 「デフォルトで使いたい」→デフォルトで早い• 「設定は短いほうがいい」→運用アプリ次第• 「安全なのがいい」→デフォルトで安全(っぽい)• 「.htaccessが使いたい」→!(Apacheだけでしょw)

Page 8: H2O and php

PHPとの連携設定• file.custom-handlerを登録• redirectを指定• done!

Page 9: H2O and php

file.custom-handler

• 指定の拡張子で何をするか指定• PHPの場合はFastCGIにつなぐように

Page 10: H2O and php

例 fastcgi.connectでtcpで接続

file.custom-handler: extension: .php fastcgi.connect: host: 127.0.0.1 port: 9000 type: tcp

Page 11: H2O and php

例 fastcgi.connectでUNIXドメインソケットで接続

file.custom-handler: extension: .php fastcgi.connect: port: /tmp/fcgi.sock type: unix

Page 12: H2O and php

例 fastcgi.spawnでphpプロセスをh2oで管理

file.custom-handler: extension: .php fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /path/to/php-cgi"

• php-fpmではなく、php-cgiな所に注意

Page 13: H2O and php

fastcgi.connectとspawnの差

• connectは既存のfastcgiデーモンに繋ぎに行く• 今まで同様、php-fpmなどで立てておく

• spawnは「H2Oが」phpを起動、管理しておいて、それを使う• php-fpm(マネージャ)が別途不要

Page 14: H2O and php

どちらにすべきか

• どっちでもよさそう• spawnはfcgiのconfigを書かなくて良い• 当然、監視点も減る(はず)• (H2Oのエラーログ日付がなくない?)

Page 15: H2O and php

この時点で

• /index.phpとか /form.php?hoge=fuga みたいなのは動く• / とか、 /user/123 みたいなのはうごかない• "try_files"的指定が必要

Page 16: H2O and php

try_filesとは?

• nginxではそう呼んでる• アクセスされたURLに対応するファイルを順番に探す仕組み• / にきたら /index.html が返されるじゃろ?ああいうのです• 「.phpって見えるとダサイよね!」

Page 17: H2O and php

nginxだと

try_files $uri $uri/ /index.php?$args;

• 一例です、nginx.confなどに書く• ?の後にイチイチ$argsとつける• これだけだと簡単にみえるが、実際には闇深い(時間ないので説明は省略)

Page 18: H2O and php
Page 19: H2O and php

Apacheだと

RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^ index.php [QSA,L]

• 一例です、http.confや.htaccessに書く• 二行目の !-f は、ファイルがなかったら、というCond

• Apacheはルール行に「?」以降のargsの記述は不要

Page 20: H2O and php

H2Oでの設定例

"doraperson2015.yapcasia.org:443": paths: /: file.dir: /var/www/dpe/htdocs redirect: url: /index.php/ internal: YES status: 307

• ファイルがなかったらindex.phpに内部リダイレクト• .phpは前述のハンドラが登録されているので、fastCGIへ

Page 21: H2O and php

例 勿論複数書ける、アプリ相乗り時には必須

"doraperson2015.yapcasia.org:443": paths: /auth: file.dir: /var/www/dpe/htdocs/auth redirect: url: /auth/index.php/ internal: YES status: 307

/: file.dir: /var/www/dpe/app/htdocs redirect: url: /index.php/ internal: YES status: 307

Page 22: H2O and php

余談:file.custom-handlerを使わない方法

hosts: "example.com:80": paths: "/app": fastcgi.connect: port: /tmp/fcgi.sock type: unix

• こういうのも書けるけど、説明省略

Page 23: H2O and php

簡単ですね!

• try_files的なのを理解してれば• 拡張子で判定するので、コードお漏らししづらい、セキュア• ただ、phpのアプリがドンドン相乗りすると設定ファイルはのびていくな…htaccessほしい…

Page 24: H2O and php

まとめ

• H2OとPHPは簡単に連携できる、apacheやnginxよりも簡単!

• H2Oをつかうとhttp2がつかえてなんとなくオシャレ、しかもデフォルトで早い(らしい)

• まだ設定のテンプレ(秘伝のたれ)はあまり見ないので、今頑張ればブクマが稼げる!(?)

• やろう!H2O!