Caddy で HTTP/2 と php-fpm を利用する

  • 2
    いいね
  • 0
    コメント

概要

Caddy は HTTP/2 対応のウェブサーバーです。Let's Encrypt に対応しているだけでなく、自己証明書を自動生成する機能もあるので、開発用途に便利です。php-fpm に対応しており、PHP アプリの開発に使うことができます。2018年に仕様が発行される予定の QUIC プロトコルへの実験的な取り組みも進められています。

開発環境で TLS を使う動機

TLS に接する機会を増やすことで TLS の知識を深めるためです。また運用環境に近い環境にすることで、よりより検証ができます。

インストール

go がインストールされているのであれば、次のコマンドでインストールできます。

go get github.com/mholt/caddy/caddy

macOS の場合、homebrew でもインストールできます。

brew install caddy

設定ファイル

設定ファイルの Caddyfile に次の内容を保存します。

localhost:2020
tls self_signed
fastcgi / 127.0.0.1:9000 php

HTTP/2 を利用する場合、TLS が必須です。さまざまなプロジェクトの設定ファイルの例は caddyserver/examples で公開されています。

起動

Caddyfile が存在するディレクトリで次のコマンドを実行します。

caddy

index.php を設置します。

<?php

phpinfo();

ブラウザーで https://localhost:2020 にアクセスしてスクリプトの結果が実行されるかどうかを確認します。

QUIC を有効にする

サーバー起動時に QUIC を有効にすることができます。2016年の時点では試験的な機能です。

caddy -quic

ベンチマーク

HTTP/2 対応のサーバーのベンチマークをとる場合、ベンチマークツールも HTTP/2 に対応している必要があります。nghttp2 付属の h2load を使う場合、次のようにコマンドオプションを指定します。

h2load -n 100000 -c 1 -m 1 https://localhost:2020/

homebrew で nghttp2 を導入できます。

brew install nghttp2

ターゲットユーザー

FAQ によれば Caddy が掲げる目標はウェブサーバー利用のしきいを下げることであり、デザイナーやライターを対象としたスタティックなサイトや WordPress をセットアップするためのチュートリアルが記載されています。今後の開発予定としてリモート管理のための API や Web ベースのコントロールパネルを挙げています。

コミュニティの評価

Hacker News で議論 されています。評価記事によれば nginx と比べてパフォーマンスは見劣りするので、運用環境に導入する場合、Go で開発されるメリットとは何かを考える必要があるでしょう。PHP の運用環境のアーキテクチャの構成や設定例についてまとめられた Gist が公開されています。Caddy の拡張方法には Wiki にまとめがあります。拡張のしくみとして HTTP ミドルウェアが採用されています。

近年の HTTP サーバーの動向として私が注目しているのは認証機能です。Oauth や JWT のように従来はサーバーサイド言語で実装されていた機能がサーバーの機能として実装される事例が見られます。Lua や mruby がサーバーの組み込みの言語として活用されています。また、仕様策定中の Token Binding のように TLS の機能を活用する事例を挙げることができます。

ほかのサーバーの選択肢

開発用途で HTTP/2 に対応したサーバーの選択肢として HHVM が挙げられます。使い方はこちらの記事をご参照ください。課題としては互換性が保たれていない可能性があります。