前言

这是一篇折腾笔记,主要是记录自己使用Caddy服务器运行php项目的过程(特别是在Windows系统上),欢迎指正本文中的不当之处。

背景信息

Caddy服务器是一个用Go语言编写的开源Web服务器(官网链接),而PHP是世界上最好的语言Web开发的一种语言。本文说明了如何在Caddy服务器上运行php程序。

0.Caddyfile的配置

Caddy 服务器有多种配置方法,从最简单的用CLI参数到可配置性高的Caddyfile再到复杂一点的json配置。本文主要探讨使用Caddyfile的情况。

我们需要用到Caddy的php_fastcgi部分(https://caddyserver.com/docs/caddyfile/directives/php_fastcgi

注意:Caddy不像Apache的PHP扩展那样能够自动拉起php-cgi,因此你需要先找到php-cgi存放的目录然后输入

1
.\php-cgi -b 127.0.0.1:9000

主动拉起php-cgi,并让其在9000端口上运行FastCGI服务器。然后在caddy服务器所在目录创建一个文件名为caddyfile的文件,填入以下内容

1
2
3
4
http://localhost {
    root path\to\you
    php_fastcgi * 127.0.0.1:9000
}

将path\to\you替换为存放有你php的目录。完成,此时浏览器打开localhost,应该就能自动访问index.php了。如果你的入口文件不是index.php,请看进阶1.2。

1.进阶

1.1.加个HTTP BasicAuth

官方文档:https://caddyserver.com/docs/caddyfile/directives/basicauth#basicauth

有时直接将一些服务暴露在公网上也不好,加个BasicAuth就能解决一些问题。但需要注意的是,HTTP BasicAuth是明文发送的用户名密码(其实有经过base64,但问题是base64不是加密,只是编码),因此不适宜用于有高安全性用途的场景。

注意:Caddy默认使用的是bCrypt算法,并且需要再经过一层base64,伪代码为base64(bcrypt(Your Password))。需要注意防止填入错误格式的密码。

在Caddyfile于网站同级(花括号)内填入

1
2
3
basicauth {
      YOUR_NAME YOUR_PASSWORD
    }

YOUR_NAME替换为你的用户名,YOUR_PASSWORD替换为经过bcrypt和base64后的密码,即可实现HTTP BasicAuth。

正确填写后应该像这样正确填写后效果图

1.2.修改默认入口php文件

只需将原来php_fastcgi的那行换成

1
2
3
php_fastcgi * 127.0.0.1:9000 {
    index yourname.php
}

其中yourname.php改成你的入口文件就行了。

参考文档

Caddyfile: https://caddyserver.com/docs/caddyfile