Web服务器Caddy安装升级到v2注意事项
Caddy相比Nginx而言部署配置简单,自动签发证书更是十分方便,v2版本正式发布一段时间了,变动较大,文档也比较匮乏,稳定使用一段时间后记录下从v1升级到v2的注意事项,以免掉坑里。
给主要服务搭建Web服务器还是建议nginx作为前端配合apache作为后端,毕竟性能最好,文档和资料也丰富,配置好就不用管了,少折腾。
卸载v1
之前是用逗比的脚本安装的,卸载很简单:
1 | sudo su |
安装Caddy 2
CentOS 7
1 | sudo su |
系统安装的caddy主程序位于/bin/caddy
,HOME目录位于/var/www
。
提供绑定端口的系统权限。
1 | sudo setcap cap_net_bind_service=+ep $(which caddy) |
需注意caddy.service要求systemctl版本至少232,而centos7是219,不要使用。
编辑/etc/caddy/Caddyfile
配置文件,具体见下文。
验证配置文件。
1 | caddy validate --config /etc/caddy/Caddyfile |
若无报错则运行。
1 | sudo -u caddy caddy start --config /etc/caddy/Caddyfile |
若希望开机自动运行则用crontab添加一条命令,频率用@reboot
。
php-fpm
安装php-fpm以及相关插件。
1 | sudo yum install php-fpm php-xml php-mbstring php-tidy |
修复安全漏洞。
1 | sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini |
修改用户和用户组为caddy
。
1 | sudo sed -i 's/user = apache/user = caddy/g' /etc/php-fpm.d/www.conf |
运行并启用php-fpm
。
1 | sudo systemctl start php-fpm |
访问报错Access Deny.
因为caddy把/var/www
设为$HOME
了,所以需开启Web服务器对HOME目录的读权限。
1 | sudo setsebool -P httpd_read_user_content 1 |
Ubuntu Server 20.04 LTS
ubuntu的安装比centos要简单一些。
添加源并安装caddy。
1 | echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" \ |
系统安装的caddy主程序位于/usr/bin/caddy
。自动签发的证书位于/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
。
创建网页文件夹并设定相关权限。
1 | sudo mkdir -p /var/www/example.com |
官方安装包忘了创建log文件并设定相关权限。
1 | sudo touch /var/log/caddy.log |
编辑/etc/caddy/Caddyfile
配置文件,具体见下文。
验证配置文件。
1 | caddy validate --config /etc/caddy/Caddyfile |
若无报错则重启服务。
1 | sudo systemctl restart caddy |
php-fpm
安装php-fpm以及相关插件。
1 | sudo apt install php-fpm php-xml php-mbstring php-tidy |
修复安全漏洞。
1 | sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.4/fpm/php.ini |
修改用户和用户组为caddy
。
1 | sudo sed -i 's/user = www-data/user = caddy/g' /etc/php/7.4/fpm/pool.d/www.conf |
运行并启用php-fpm
。
1 | sudo systemctl start php7.4-fpm |
Caddyfile常用示例
带SSL的静态网页服务器
1 | example.com { |
log
部分设定输出为文件。root
设定网页根目录。file_server
会自动渲染根目录下的index.html
。
后面示例以此作为模板添加相关语句即可。
动态网页服务器
由v1的fastcgi
改为php_fastcgi
。
1 | php_fastcgi /path/* unix//run/php/php7.4-fpm.sock |
透明代理
v2默认为transparent
,故无需像v1那样指定,但子路径最后需添加斜杠和通配符,否则会404。
1 | reverse_proxy /path/* 127.0.0.1:1234 |
反向代理WebSocket服务
ws的路径则不用通配符。
1 | reverse_proxy /path 127.0.0.1:1234 { |
设定带密码保护的文件管理服务
以密码12345
为例,先计算哈希值。
1 | caddy hash-password --plaintext 12345 |
然后配置如下。
1 | basicauth /path/* { |
Caddy API
v2改成使用json作为配置文件格式,即便使用Caddyfile也是先转换为json。并且可以用REST API通过HTTP协议进行及时更改。好处就是调试方便,可编程。但个人而言,网页服务器配置很少改动,所以更倾向使用传统的Caddyfile来配置。
想多了解的可以查看官方文档API。
将配置文件转换为json
1 | caddy adapt --config /etc/caddy/Caddyfile --adapter caddyfile > example.com.json |
参考资料
Download Caddy
Caddy Upgrade Guide
Install a LEMP Stack on CentOS 7