centos 安装 php74 和 php82 及与 nginx 集成 | server 运维论坛-金年会app官方网

以下基本是 chatgpt 帮助下完成的,中途遇到的问题记录一下。
2024/12/31 已用于业务半年余

安装 php

添加 remi 存储库:

到 找到与 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 配置文件(/etc/opt/remi/php版本/)中配置。

# unix 套接字
listen = /dev/shm/php-cgi.sock
# ip 地址和端口,多版本要改成不同的
# listen = 127.0.0.1:9000

ip:portunix:/path/php-cgi.sock 配置一个就可以了。区别:

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

配置示例:

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

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

以上无论是端口还是 unix 方式,都要注意不要和已运行的 php 冲突。
我们重点使用下 unix 套接字方式.

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

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
讨论数量: 2

不用在nginx里指定php版本吗,两个php都监听听9000端口?

7个月前
php_yt (楼主) 7个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
97
粉丝
24
喜欢
159
收藏
359
排名:316
访问:3.0 万
博客标签
社区赞助商
网站地图