Caddy v2+PHP を Windows で動作させる。
Windows で SSL が使える Web サーバは……💻カタカタカタ…ん?
Caddy!? これ使えるじゃないですか!!
Caddy 2 - The Ultimate Server with Automatic HTTPS
Fast, cross-platform HTTP/2 web server with automatic HTTPS - caddyserver/caddy | GitHub
その時何かが自分につぶやく……
Windows 10 で Caddy v2 を動かすのです。
今の環境そのまま動作できるように……
えっ、Caddy v2!? まだ Caddy v2 ってベータ版じゃないですか!!
Caddy v1 は資料ありますけど、v2 は Caddyfile の記載が変わってますよ!?
ドキュメントも不完全な状態で、動作報告も少ない中で、
今の環境は PHP もありますよ!!?
でも、まだ誰もやっていない事をやってしまうのって、何か燃えますよね。
よし、やってみますか! 🔥ボッ! 💻カタカタカタ…
カタカタ…
カタ…
……
カタ…
……
……
あ……
……
🖱️カチ…
……
……動いちゃった 😁😆😲
php_fastcgi 127.0.0.1:9000 とか、こんな記載、まだどこにもないようです。
Caddy v1 だと on で起動する php-cgi を記載するように記載があるのですが、
Caddy v2 ではそれができないような? でも php-cgi を別に起動すれば OK でした。
Caddy と php-cgi 間で通信する事になるので、
上記記載のポート 9000 は外部に開ける必要ありません。
アクセス多めのところだともうひと工夫いるかもしれません。
しかし、これが Caddy 設定ファイルの全てなのですよ。
これで Let’s Encrypt で SSL サーバ証明書発行して、(もちろん自動更新)
独自ドメインで SSL 参照できてしまうんです。本当にこれだけ!
Apache の httpd.conf とか、目的の行がどこにあるか探したものですが、
こんなにシンプルなら、もう心配不要ですね。
phpinfo を出しておきます。
C:\WINDOWS とか Windows 構成で、Caddy/v2.0.0-beta12 って出てますし、
HTTP/2.0・TLSv1.3 と最新仕様でバッチリ動作してます! これで安心。
Caddy v2+php-cgi on Windows | Caddy Forum
公式フォーラムにも投稿しておきました。
Caddy 原作者の Matt Holt さんより直々に返事をいただき、
「今ドキュメント作ってる」との事なので、
近いうちに Caddy v2 関連はもう少し詳細な情報が得られるでしょう。
更に Windows で Caddy v2 を動作させる方法に質問があったので、
自分が返事を入れておきました。
Caddy v1 では実行ファイルのクリックで起動できるのですが、
Caddy v2 では caddy run などのオプションが必要なため、ショートカットを作るのが便利です。
また Dropbox に実行ファイルや Caddyfile、 Web の中身など一式を入れてしまうと、
運用していたパソコンがダウンしても、他のパソコンから Caddy を起動して
運用を継続する事が容易に行えます。(ルータの参照先変更も必要になりますが……)
Caddy 2 with windows | Caddy Forum
すでに Caddy を使っている人達が更にヒントをくれるでしょう。
追加 2020/01/20
Caddy v2 では php_fastcgi を使用した場合、
ファイルが存在しない場合は root 下の index.php を処理する仕様にしてあります。
直接いくつかの .php ファイルをを作って動かそうとしている場合、
404 にはならず、意図せず index.php を参照する事があります。
index.php で 404 処理する必要があります。例えばこんな感じです。
<?php
$uri = $_SERVER['REQUEST_URI'];
if ( strcmp($uri, "/") != 0 &&
strcmp($uri, "/index.html") != 0 &&
strcmp($uri, "/index.php") != 0 )
{
http_response_code(404);
print "404 Not Found\n";
exit;
}
// Here is the original PHP
?>
<!-- or here is the original HTML. -->
または、こちらの Google App Engine で用いている index.php のように、
仮想 root ディレクトリ下のコンテンツを index.php で処理させる方法も
Caddy v2 で使えます。
これは Google App Engine で PHP7 を使った場合に近い動作で、
また、このようにする事で WordPress や CMS をまともに動かせる仕組みになっています。
404 を出すのは PHP を実行させたフレームワーク側が出力するのが
今や常識となってきているので、
Caddy はこの辺も今らしい実装をしている、という感じがします。
追加 2020/01/23
Caddy 2.0.0 beta 13 が公開されると共にドキュメントも更新されまして、
Caddyfile の記載詳細も加わりました。
php_fastcgi (Caddyfile directive) — Caddy Documentation
Examples が……
php_fastcgi 127.0.0.1:9000
となっていました。それが分かっていても Windows は php-fpm がなく、
代わりに php-cgi.exe を起動させる必要があります。
この情報を公開して良かっただろうと感じています。
数日運用していますが、意味なく負荷が上がったり、急に落ちたりする事なく、
安定して運用し続けています。 なかなか良い感じですよ。
追加 2020/02/20
Caddy の使い方を簡単にまとめました。