centos 安装 php74 和 php82 及与 nginx 集成

以下基本是 chatgpt 帮助下完成的,中途遇到的问题记录一下。

安装 php

添加 Remi 存储库:

rpms.remirepo.net/enterprise 找到与 centos 版本对应的存储库:

[root@VM-0-10-opencloudos shm]# cat /etc/redhat-release
OpenCloudOS release 8.8.2305 (Core) 
yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.8.rpm

启用所需版本的 Remi 存储库:

yum-config-manager --enable remi-php82
yum-config-manager --enable remi-php74

安装 PHP 8.2 和 PHP 7.4:

yum install php82 php82-php-cli php82-php-fpm
yum install php74 php74-php-cli php74-php-fpm

配置 PHP:

ln -s /usr/bin/php82 /usr/local/bin/php82
ln -s /usr/bin/php74 /usr/local/bin/php74

启动 PHP-FPM 服务:

systemctl start php82-php-fpm
systemctl start php74-php-fpm

确认 PHP 版本

php82 -v
php74 -v

配置 php-fpm

nginx 的配置示例:

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    #fastcgi_pass   unix:/path/to/php-cgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

fastcgi_pass 允许 tcp 或者 unix 地址,在 php-fpm 配置文件中配置。查找 php-fpm.conf 位置:

[root@VM-0-10-opencloudos shm]# ps -ef | grep php-fpm
root     2754421       1  0 11:46 ?        00:00:00 php-fpm: master process (/etc/opt/remi/php82/php-fpm.conf)

通常是在 php-fpm.d 里的 www.conf

centos 安装 php74 和 php82 及配置 nginx

/etc/opt/remi/php82/php-fpm.d/www.conf:

;listen = /var/opt/remi/php82/run/php-fpm/www.sock
# UNIX 套接字
listen = /dev/shm/php-cgi.sock
# IP 地址和端口
# listen = 127.0.0.1:9000

127.0.0.1:9000unix:/path/php-cgi.sock 区别:

  • IP 地址和端口方式适用于网络通信,可以在不同的主机上进行通信,但可能会产生一些网络开销。
  • UNIX 套接字方式适用于本地通信,仅在同一台物理服务器上进行通信,速度更快,因为不需要经过网络传输。

配置示例:

;listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock

/dev/shm 是 Linux 系统中的一个特殊目录,通常用于共享内存。它是一个临时文件系统,意味着其内容通常存储在系统的内存中而不是硬盘上,这样可以提高访问速度。

我们重点使用下 UNIX 套接字方式,完成以上步骤后,web 访问 php 文件可能会报错: connect() to unix:/dev/shm/php-cgi.sock failed (13: Permission denied) while connecting to upstream
这是因为 nginx 的用户去读写 .sock 文件没有权限。

假设 nginx 的用户为 www,那么 php-fpm 如下配置(二选一):

  • listen.owner、listen.group
    listen.owner = www
    listen.group = www

    listen.owner、listen.group 是设置unix套接字的权限(如果使用了),为了允许来自web服务器的连接,必须设置权限。

也就是说,如果选择了 listen = /dev/shm/php-cgi.sock unix 套接字的通信方式,则须设置 listen.owner、listen.group,即套接字文件的所有者和所属组,和 nginx 用户保持一致,否则 nginx 没有权限访问 .lock 文件。

  • 如果 php-fpm 配置文件中有 listen.acl_users 项代表支持 acl 功能,以下配置与 listen.owner、listen.group 二选一
    listen.acl_users = www
    ;listen.acl_groups =

    通常情况下,PHP-FPM 会监听一个 Unix 套接字或 TCP 地址以接受来自 web 服务器(如 Nginx、Apache 等)的请求。listen.acl_users 允许你指定一组用户或组,这些用户或组可以连接到 PHP-FPM 服务器,而其他用户则被拒绝。如果设置了它,listen. owner and listen. group 将被忽略。

php-fpm 完整配置参考:

[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
;user 和 group 是 php-fpm 进程运行的用户和用户组,为了减少安全风险,通常不应该以 root 用户身份运行。
user = www
group = www

listen.owner = www
listen.group = www
;listen.mode = 0660
;listen.acl_users = www
;listen.acl_groups =

配置后 php-cgi.sock 的用户和用户组为 www
centos 安装 php74 和 php82 及与 nginx 集成

[www]
listen = /dev/shm/php-cgi.sock
listen.allowed_clients = 127.0.0.1
;user 和 group 是 php-fpm 进程运行的用户和用户组,为了减少安全风险,通常不应该以 root 用户身份运行。
user = www
group = www
;listen.owner = www
;listen.group = www
;listen.mode = 0660
listen.acl_users = www
;listen.acl_groups =

配置后 php-cgi.sock 的用户和用户组为 root,但 nginx 仍能与之通信。

centos 安装 php74 和 php82 及与 nginx 集成


到此,web 服务器就可以运行了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
welcome come back
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
95
粉丝
24
喜欢
156
收藏
348
排名:324
访问:2.9 万
私信
所有博文
社区赞助商