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 ってベータ版じゃないですか!!

DOWNLOAD 2.0 BETA の記載

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 とか、目的の行がどこにあるか探したものですが、
こんなにシンプルなら、もう心配不要ですね。

Caddy v2 から phpinfo

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 の使い方を簡単にまとめました。

🎈 Caddy | ふうせん🎈 FU-SEN