rocky linux8 安装caddy server 及php7.4

-
-
2024-08-01

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:tired_face:

二、安装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了。假如你还有其它问题,欢迎留言

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录