Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

H2O and php

4,032 views

Published on

H2Oとphp連携の話のLTです
PEPABO tech conference - YAPC::ASIA PEPABO 2015 -

Published in: Software
  • Be the first to comment

H2O and php

  1. 1. H2OとPHPの話
  2. 2. who am i ? UZULLA PHPer Hachioji.pm 「メールフォームを書いて生活」
  3. 3. 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
  4. 4. 長所 • HTTP2を早速サポートしている • 「デフォルトで」高速に動作する • 日本人が作っている(!) • PHPとの親和性がある気がしないでもない
  5. 5. 短所(?) • ググれない • まだ事例が少ない • GithubのコードとISSUEを読もう • 「そうだ、本人に聞こう」 • 機能の数はちょっと少ない(nginxやApacheに比べて、相手が 悪い)
  6. 6. PHPとの関係は? • 本来特にない! • ファイル拡張子でハンドラ指定できる • fastCGIが使える • "fastcgi.spawn"
  7. 7. PHPerとしては • 「デフォルトで使いたい」→デフォルトで早い • 「設定は短いほうがいい」→運用アプリ次第 • 「安全なのがいい」→デフォルトで安全(っぽい) • 「.htaccessが使いたい」→!(Apacheだけでしょw)
  8. 8. PHPとの連携設定 • file.custom-handlerを登録 • redirectを指定 • done!
  9. 9. file.custom-handler • 指定の拡張子で何をするか指定 • PHPの場合はFastCGIにつなぐように
  10. 10. 例 fastcgi.connectでtcpで接続 file.custom-handler: extension: .php fastcgi.connect: host: 127.0.0.1 port: 9000 type: tcp
  11. 11. 例 fastcgi.connectでUNIXドメインソケットで接続 file.custom-handler: extension: .php fastcgi.connect: port: /tmp/fcgi.sock type: unix
  12. 12. 例 fastcgi.spawnでphpプロセスをh2oで管理 file.custom-handler: extension: .php fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /path/to/php-cgi" • php-fpmではなく、php-cgiな所に注意
  13. 13. fastcgi.connectとspawnの差 • connectは既存のfastcgiデーモンに繋ぎに行く • 今まで同様、php-fpmなどで立てておく • spawnは「H2Oが」phpを起動、管理しておいて、それを使 う • php-fpm(マネージャ)が別途不要
  14. 14. どちらにすべきか • どっちでもよさそう • spawnはfcgiのconfigを書かなくて良い • 当然、監視点も減る(はず) • (H2Oのエラーログ日付がなくない?)
  15. 15. この時点で • /index.phpとか /form.php?hoge=fuga みたいなのは動く • / とか、 /user/123 みたいなのはうごかない • "try_files"的指定が必要
  16. 16. try_filesとは? • nginxではそう呼んでる • アクセスされたURLに対応するファイルを順番に探す仕組み • / にきたら /index.html が返されるじゃろ?ああいうのです • 「.phpって見えるとダサイよね!」
  17. 17. nginxだと try_files $uri $uri/ /index.php?$args; • 一例です、nginx.confなどに書く • ?の後にイチイチ$argsとつける • これだけだと簡単にみえるが、実際には闇深い(時間ないので 説明は省略)
  18. 18. Apacheだと RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] • 一例です、http.confや.htaccessに書く • 二行目の !-f は、ファイルがなかったら、というCond • Apacheはルール行に「?」以降のargsの記述は不要
  19. 19. H2Oでの設定例 "doraperson2015.yapcasia.org:443": paths: /: file.dir: /var/www/dpe/htdocs redirect: url: /index.php/ internal: YES status: 307 • ファイルがなかったらindex.phpに内部リダイレクト • .phpは前述のハンドラが登録されているので、fastCGIへ
  20. 20. 例 勿論複数書ける、アプリ相乗り時には必須 "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
  21. 21. 余談:file.custom-handlerを使わない方法 hosts: "example.com:80": paths: "/app": fastcgi.connect: port: /tmp/fcgi.sock type: unix • こういうのも書けるけど、説明省略
  22. 22. 簡単ですね! • try_files的なのを理解してれば • 拡張子で判定するので、コードお漏らししづらい、セキュア • ただ、phpのアプリがドンドン相乗りすると設定ファイルは のびていくな…htaccessほしい…
  23. 23. まとめ • H2OとPHPは簡単に連携できる、apacheやnginxよりも簡 単! • H2Oをつかうとhttp2がつかえてなんとなくオシャレ、しか もデフォルトで早い(らしい) • まだ設定のテンプレ(秘伝のたれ)はあまり見ないので、今 頑張ればブクマが稼げる!(?) • やろう!H2O!

×