Caddy2+PHP配置(sock)

网上基本上都是用TCP套接字或者用Caddy1的,所以教程不适用,在此记录一下

exmaple.com
{
   tls admin@example.com
   root * /data/web/example/public
   php_fastcgi unix//dev/shm/php-fpm.sock {
     root /data/web/example/public
   }
   rewrite * /index.php
   log {
     output file /data/log/web.log
   }
 }

精华都在上面的示例中了,下面我简单介绍一下。

  • tls,就是ssl证书设置啦,如果输邮箱就是申请Let's Encrypt,必须提前解析好域名;也可以指向具体的crt证书。
  • root,就是网站根目录,即index文件所在目录。这个*必不可少,它的位置是matcher,全程是request matcher,说白了就是uri的匹配,*代表匹配所有请求。
  • php_fastcgi,因为caddy2的教程网上很少,所以对它的介绍也很少,这里给出官方文档:https://caddyserver.com/docs/caddyfile/directives/php_fastcgi#php-fastcgi,简单的来说就是对接php-fpm的,实际上可以不需要在里面指定root,只是保险起见而已,其他的设置也不需要,直接一条 php_fastcgi unix//dev/shm/php-fpm.sock 其实就完事了。需要注意的是这里第一个参数也有可选 matcher ,只不过不是必须的,默认为 * 。php-fpm_gateways的位置,既可以填TCP,也可以填Unix Socket,我的示例中填的是Unix Socket,所以需要加上 unix/ 前缀,然后跟上sock的绝对路径。如果是TCP,直接填 127.0.0.1:9000 这样的形式就可以了。关于address的说明,可以参考:https://caddyserver.com/docs/conventions#network-addresses
  • rewrite,就是地址重写,一般来说它是作为内部重定向存在的,也就是不会真正修改浏览器的地址,但是内容指向的是想要重定向的内容。关于地址重写,如果不清楚的话,可以搜索了解一下。官方文档:https://caddyserver.com/docs/caddyfile/directives/rewrite#rewrite。我这里设置的规则是,所有请求都给index.php处理,也就是php来负责处理路由,一般框架也是这么做的。假如你有比较复杂的规则,请参考另一篇文章:暂无。
  • log,这个很简单不用说了,就是日志配置,看文档:https://caddyserver.com/docs/caddyfile/directives/log#log

caddy对于简单的规则非常友好,基本开箱即用,这是因为它内置了一些“语法糖”,可以让你快速配置比较复杂的内容。但是对于比较复杂的规则,例如一些需要正则表达式的重写规则,就显得比较啰嗦了,跟Nginx/Apache没什么两样。其实我更建议把Caddy当作一个可以为你自动申请Let's Encrypt的反代服务器,而其他的交给Apache来处理就可以了,这样可以省很多事;但是如果你喜欢折腾,或者你觉得再多一个Web服务器太累赘或太占内存,折腾一下Caddy的配置也没什么,就是有点烦人(我在Apache写的规则放到Caddy上真的过于麻烦,不过配好了也很容易读就是了)。

这个配置实际上没有考虑静态文件的问题,因此若是访问静态文件就会翻车,所以我另写了一篇文章介绍如何稳妥地兼容静态文件的同时又能实现内部重定向:暂无。

发表评论