目录
问题描述:
遇到安装的php服务,查看端口有些版本linux发现有9000端口,有些版本没有查到9000端口,但是php-fpm是在运行的,然后检查nginx的配置和php都没啥问题,但是打开网页显示显示502网关错误。
原因:
PHP在不同Linux发行版或者不同版本中,对应的PHP的监听方式不同,然后和Nginx配置的location中fastcgi_pass参数配置不一致导致的。
在配置Nginx与PHP-FPM时,可以选择两种不同的方式来指定PHP-FPM的监听方式,分别是使用Unix域套接字(Unix socket)和TCP/IP套接字(IP socket)。
1. 使用 Unix 域套接字(Unix Socket)
- 配置方式:
fastcgi_pass unix:/run/php-fpm/www.sock;
- PHP-FPM 配置:
listen = /run/php-fpm/www.sock
区别和优势:
- 性能:Unix套接字通常比TCP/IP套接字性能更好,因为它们避免了TCP/IP协议栈的开销。
- 安全性:Unix套接字只能在同一台服务器上的进程之间使用,因此在安全性上比TCP/IP更好。
- 通信方式:使用Unix套接字时,Nginx与PHP-FPM之间的通信是通过本地文件系统进行的,而不是网络通信,这可能更快速和可靠。
2. 使用 TCP/IP 套接字
- 配置方式:
fastcgi_pass 127.0.0.1:9000;
- PHP-FPM 配置:
listen = 127.0.0.1:9000
区别和优势:
- 灵活性:TCP/IP套接字允许PHP-FPM与Nginx运行在不同的服务器上,只要网络连通性正常。
- 监控和管理:TCP/IP套接字使得PHP-FPM的管理和监控更加灵活,可以通过网络远程管理和监控。
- 复杂性:相对于Unix套接字,使用TCP/IP套接字可能会增加一些网络协议和通信的复杂性和开销。
如何选择
- 性能需求:如果性能是首要考虑因素,且Nginx与PHP-FPM运行在同一台服务器上,推荐使用Unix套接字。
- 分布式架构:如果有分布式架构的需求或者希望灵活管理和监控PHP-FPM服务,可以选择TCP/IP套接字。
- 默认选择:大多数情况下,Unix套接字是默认选择,因为它通常能提供更好的性能和安全性。
即如果php默认使用listen = 127.0.0.1:9000监听方式,那么对应的Nginx配置文件就应该使用fastcgi_pass 127.0.0.1:9000;
反之若使用listen = /run/php-fpm/www.sock监听方式,那么对应的Nginx配置文件就应该使用fastcgi_pass unix:/run/php-fpm/www.sock;
扩展:Rocky_Linux9.4安装PHP的步骤:
php配置文件路径:/etc/php-fpm.d/www.conf
使用Remi存储库安装PHP
-
安装Remi存储库:
Rocky Linux 9.4 可以使用Remi存储库来安装最新的PHP版本。以下是安装Remi存储库的步骤:
# 安装epel-release存储库 sudo dnf -y install epel-release # 安装Remi存储库 sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
请注意,此处使用的是
remi-release-9.rpm
,适用于Rocky Linux 9.x版本。 -
启用PHP模块:
安装完Remi存储库后,您需要启用特定版本的PHP。假设您想要安装PHP 7.4,可以使用以下命令启用对应版本的PHP模块:
sudo dnf module reset php sudo dnf module enable php:remi-7.4
如果您想安装更高版本的PHP(如PHP 8.0或更高),则需要调整上述命令中的版本号。
-
安装PHP和相关扩展:
一旦启用了PHP模块,您可以安装PHP及其常用扩展,例如:
sudo dnf -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json
这是安装PHP及其一些常用扩展。也可以根据您的需求和项目需要选择安装更多的PHP扩展。
-
启动PHP-FPM服务(如果安装了PHP-FPM):
sudo systemctl start php-fpm sudo systemctl enable php-fpm
将启动PHP-FPM服务并设置为在系统启动时自动启动。
-
验证安装:
安装完成后,您可以通过以下命令验证PHP是否成功安装:
php -v
将会显示PHP的版本信息,确认安装成功。
[root@localhost ~]# php -v
PHP 8.1.29 (cli) (built: Jun 5 2024 05:51:57) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.29, Copyright (c) Zend Technologies
with Zend OPcache v8.1.29, Copyright (c), by Zend Technologies