centos因为寿命将近,最近也在尝试别的替代,这里以rocky linux为例记录并分享一下
如何在rocky linux下面安装caddy 及php ,这里都是dnf install(rockylinux8的yum是软链接的dnf),非编译安装方式。
实验系统:RockyLinux 8(理论上centos8也是可以的)
默认安装的caddy 版本是:2.7.6
目标php版本:7.4
一、首先安装caddy:※
1.安装 dnf-command(copr) 软件包
yum -y install 'dnf-command(copr)'
2.启用 @caddy/caddy 仓库
yum copr enable @caddy/caddy
3.安装caddy 我这个时候默认安装的caddy 版本是:2.7.6
yum -y install caddy
4.找到 Caddy Web 服务器的安装目录
whereis caddy
5.为Caddy服务创建存放证书的目录 (之前在centos7.9安装caddy我就没有进行这一步,也是正常的)
mkdir /etc/ssl/caddy
chown -R caddy:root /etc/ssl/caddy/
chmod o-rwx /etc/ssl/caddy/
6.添加开机自动启动caddy服务并启动
systemctl enable caddy
systemctl start caddy
7.现在访问80端口应该已经看到caddy在服务了,查看添加编辑自己的站点信息访问caddy默认站点配置文件如下:
vim /etc/caddy/Caddyfile
到此caddy安装好了,下面说下安装php7.4
二、安装php7.4※
1.启用rocky linux php7.4模块:
sudo dnf module enable php:7.4 -y
2.安装,添加自动启动,启动php三步曲:
sudo dnf install -y php php-fpm
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
3.在caddy站点配置文件添加php连接示例:
yourdomain.com {
root * /path/to/your/website
encode zstd gzip
log
file_server
php_fastcgi unix//run/php-fpm/www.sock
}
注意:这里unix套接字为什么是www.sock
而不是网上说的php-fpm.sock
,我也不知道,我默认安装的是这个,如果你的不是这样你可以找找看,首先运行命令:
ps aux | grep php-fpm
里面有显示php-fpm的配置文件路径,一般是/etc/php-fpm.conf
我们要在里面找listen 参数,这个文件里面没有,在它include的/etc/php-fpm.d/*.conf里面
找到/etc/php-fpm.d/下面默认就是www.conf
,然后里面listen是/run/php-fpm/www.sock
你可以用命令
find / -type s
来验证下/run/php-fpm/www.sock
是否在里面。
三、遇到问题,解决问题※
按上面的做好了,你兴奋的在caddy站点配置文件里面设置的站点目录放入了index.php,然而打开网站却显示空白。
这里有坑踩了,这是因为 caddy 通常会以非 root 用户的身份运行,而你用ROOT用户默认安装的php-fpm只有 root 用户和 root 组成员可以访问套接字。
你可以运行命令:
ls -l /run/php-fpm/www.sock
假如显示:srw-rw----+ 1 root root 0 /run/php-fpm/www.sock
这样的权限,那就是了。
可以通过运行下面命令改变套接字的访问权限来解决:
sudo chmod 666 /run/php-fpm/www.sock
sudo systemctl restart caddy

四、可能存在的风险※
题外:将套接字权限设置为 666 可能存在安全风险,因为这样做会允许任何用户都可以读取和写入该套接字,可能会导致潜在的安全问题。在生产环境中,建议采取更安全的方法来允许 caddy 访问 PHP-FPM 的 Unix 套接字。
一种更安全的解决方法是使用组权限和访问控制列表(ACL)来控制套接字的访问权限,以限制特定用户或组访问套接字。您可以按照以下步骤操作:
1.创建一个新组,例如 caddygroup:
sudo groupadd caddygroup
2.将 caddy 用户添加到 caddygroup 组中:
sudo usermod -aG caddygroup caddy
3.更改套接字文件的所有者为 root 用户和 caddygroup 组,并设置权限为 660:
sudo chown root:caddygroup /run/php-fpm/www.sock
sudo chmod 660 /run/php-fpm/www.sock
4.使用 ACL 为 caddygroup 组添加访问权限:
sudo setfacl -m g:caddygroup:rw /run/php-fpm/www.sock
这样做将允许 caddy 用户所在的 caddygroup 组的成员读取和写入套接字文件。同时,其他用户将无法访问该套接字。
请注意,使用 ACL 依赖于文件系统是否支持 ACL,以确保 ACL 设置正常工作。在设置 ACL 之后,您可以重新启动 caddy 服务并测试连接以确保一切正常。
通过以上步骤,您可以更安全地配置 caddy 与 PHP-FPM 之间的连接,同时减少潜在的安全风险。
五、我的实验最终方案※
上面是解决思路及建议,涉及到几个服务及目录之间的权限问题,我实验的解决方案是,统一使用caddy用户及caddy组。
编辑 /etc/php-fpm.d/www.conf
将里面的
user = apache
group = apache
改成:
user = caddy
group = caddy
然后更改/run/php-fpm/www.sock
的访问权限,加入caddy组
sudo chown root:caddy /run/php-fpm/www.sock
sudo chmod 660 /run/php-fpm/www.sock
sudo setfacl -m g:caddy:rw /run/php-fpm/www.sock
sudo systemctl restart caddy
当然可能还有别的坑,比如你加的目录,没有给caddy和php-fpm用户权限。这里提醒一下,自己加上相应的权限就好
上面问题都解决了,基本上就OK了。反正我的是可以正常运行PHP了。假如你还有其它问题,欢迎留言