O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

H2O and php

4.101 visualizações

Publicada em

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

Publicada em: Software
  • Seja o primeiro a comentar

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!

×