当前位置: 首页 > backend >正文

CentOS7安装 PHP-FPM 7.4

在 CentOS 7 上安装 **PHP-FPM 7.4**,你可以通过启用 REMI 仓库来获取 PHP 7.4 的安装包。以下是安装步骤:

步骤 1: 安装 EPEL 和 REMI 仓库

1. 安装 EPEL 仓库(提供额外的软件包):

   sudo yum install epel-release -y

2. 安装 REMI 仓库(REMI 仓库提供了不同版本的 PHP):

   sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y

3. **安装 `yum-utils` 工具**(用于管理仓库):

   sudo yum install yum-utils -y

步骤 2: 启用 PHP 7.4 仓库

使用 `yum-config-manager` 命令启用 **remi-php74** 仓库(即 PHP 7.4):

sudo yum-config-manager --enable remi-php74

步骤 3: 安装 PHP 7.4 和 PHP-FPM

使用以下命令安装 PHP 7.4 和常见的 PHP 扩展包:

sudo yum install php php-fpm php-cli php-mysqlnd php-xml php-mbstring php-json php-curl php-zip -y

步骤 4: 配置 PHP-FPM

1. 检查 PHP-FPM 配置文件,确保它正确配置。配置文件通常位于 `/etc/php-fpm.d/www.conf`。你可以编辑该文件,确保它满足你的需求。例如,你可以修改 `listen` 设置来选择 TCP 或 Unix socket(如果你使用 Nginx)。

   编辑 PHP-FPM 配置文件:

   sudo nano /etc/php-fpm.d/www.conf

   例如,如果你想使用 Unix Socket,可以修改为:

   listen = /var/run/php/php7.4-fpm.sock

原:listen = 127.0.0.1:9000

2. 确保 PHP-FPM 可以写入指定目录(例如 `/var/run/php`):

   sudo chown -R apache:apache /var/run/php   # 如果你使用 Nginx

   sudo chown -R nginx:nginx /var/run/php    # 如果你使用 Apache

确保目录存在

首先,检查 /var/run/php/ 目录是否存在。如果目录不存在,可以手动创建它:

sudo mkdir -p /var/run/php

设置正确的权限(经反复测试www-data的用户和用户组容易造成权限受限,建议用nginx用户和用户组)

确保 php-fpm 进程有足够的权限在该目录中创建和访问 Unix socket 文件。你可以通过以下命令设置权限:

sudo chown -R nginx:nginx /var/run/php

问题1:如果一直提示

/bin/chown: cannot access ‘/var/run/php/php7.4-fpm.sock’: No such file or directory

就需要手动创建php7.4-fpm.sock

手动创建套接字文件(如果需要):

sudo touch /var/run/php/php7.4-fpm.sock

sudo chown nginx:nginx /var/run/php/php7.4-fpm.sock

sudo chmod 660 /var/run/php/php7.4-fpm.sock

重启 PHP-FPM 服务:

sudo systemctl restart php-fpm

问题2:每次执行systemctl restart php-fpm就会将文件/var/run/php/php7.4-fpm.sock的所有者和分组自动设置为root

手动修复文件权限:

可以在每次 PHP-FPM 启动后手动修复套接字文件的权限。你可以通过 systemd 服务文件中的 ExecStartPost 指令,确保在 PHP-FPM 启动后自动设置套接字的所有者和权限。

编辑 systemd 服务文件:

sudo systemctl edit php7.4-fpm.service

添加 ExecStartPost 指令:

在 [Service] 部分添加一个 ExecStartPost 指令,设置套接字文件的所有者和权限:

[Service]

ExecStartPost=/bin/chown nginx:nginx /var/run/php/php7.4-fpm.sock

这将在 PHP-FPM 启动后自动调整套接字文件的权限,使其属于 nginx 用户(或你使用的其他用户)。

重新加载并重启服务:

sudo systemctl daemon-reload

sudo systemctl restart php7.4-fpm

步骤 5: 启动并设置 PHP-FPM 开机启动

启动 PHP-FPM 服务,并设置开机自启:

# 启动 PHP-FPM

sudo systemctl start php-fpm

# 设置 PHP-FPM 开机自启

sudo systemctl enable php-fpm

步骤 6: 配置 Nginx 使用 PHP-FPM

如果你使用 **Nginx** 作为 Web 服务器,可以配置 Nginx 来处理 PHP 文件。编辑 Nginx 的配置文件(例如 `/etc/nginx/nginx.conf` 或站点配置文件 `/etc/nginx/conf.d/default.conf`)。

确保你的 Nginx 配置中包括以下部分:

```nginx

server {

    listen 80;

    server_name yourdomain.com;

    root /var/www/html;

    index index.php index.html index.htm;

    location / {

        try_files $uri $uri/ =404;

    }

    

    # 处理 PHP 文件
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;  # PHP 7.4-FPM 的 Unix 套接字路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 防止访问隐藏文件如 .htaccess
    location ~ /\. {
        deny all;
    }

}

检查 Nginx 配置正确

sudo nginx -t # 检查配置文件是否有语法错误

若有错误报错:

nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/com.ynhhpm.conf:41

nginx: configuration file /etc/nginx/nginx.conf test failed

解决方法

检查 fastcgi-php.conf 文件是否存在:

首先,检查是否确实有 /etc/nginx/snippets/fastcgi-php.conf 文件。如果没有,您可以手动创建这个文件,或者检查 Nginx 的安装是否缺少这个文件。

运行以下命令检查文件是否存在:

ls /etc/nginx/snippets/fastcgi-php.conf

您需要先确保 /etc/nginx/snippets/ 目录存在。可以使用以下命令来创建这个目录:

sudo mkdir -p /etc/nginx/snippets

-p 参数会确保创建缺失的父级目录。

创建 fastcgi-php.conf 文件:

现在,您可以尝试创建 fastcgi-php.conf 文件。使用文本编辑器(例如 nano 或 vim)来创建并编辑文件:

sudo nano /etc/nginx/snippets/fastcgi-php.conf

然后将以下内容粘贴到文件中:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_param REQUEST_URI $request_uri;

fastcgi_param DOCUMENT_URI $document_uri;

fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;

保存并退出编辑器(在 nano 中使用 Ctrl+O 保存,Ctrl+X 退出)。

验证配置并重新加载 Nginx:

完成上述步骤后,可以验证 Nginx 配置是否正确,并重新加载 Nginx:

sudo nginx -t

sudo systemctl reload nginx

步骤 7: 重启 Nginx 和 PHP-FPM

1. 重启 Nginx:

   sudo systemctl restart nginx

2. 重启 PHP-FPM:

   sudo systemctl restart php-fpm

步骤 8: 验证 PHP 安装

创建一个测试 PHP 文件,以确保 PHP 正常工作:

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

这里/var/www/html/info.php可自定义指定

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

然后,在浏览器中访问 `http://yourdomain.com/info.php`,你应该能看到 PHP 配置页面。

失败404

当你访问 http://yourdomain.com/info.php 时提示 "404 Not Found" 错误,通常意味着服务器无法找到你请求的文件。这个问题可能由以下几种原因引起:

1. 文件路径错误

确保 info.php 文件确实存在于你的 web 服务器的正确目录中。例如,如果你将文件放在网站根目录下,它应该位于 /var/www/html/info.php(或对应的目录)上,具体路径取决于你的 web 服务器配置。

检查方法:

通过 FTP 或 SSH 进入服务器,确认 info.php 文件是否在正确的位置。

如果文件在子目录下(如 /var/www/html/subdir/info.php),请尝试访问 http://yourdomain.com/subdir/info.php。

2. 文件权限问题

确保 info.php 文件的权限设置正确,Web 服务器(如 Apache 或 Nginx)需要有读取该文件的权限。

检查方法:

运行以下命令查看权限:

ls -l /path/to/your/info.php

确保文件的权限是 644(用户可读写,组和其他用户可读),目录权限是 755(用户可读写执行,组和其他用户可读执行)。

如果权限不正确,可以使用以下命令进行修改:

chmod 644 /path/to/your/info.php

chmod 755 /path/to/your/directory

3. Web 服务器配置问题

如果你使用 Apache 或 Nginx,检查配置文件是否正确,尤其是 DocumentRoot 或 root 设置是否指向了正确的目录。

检查 Apache 配置:

检查 /etc/apache2/sites-available/000-default.conf 或其他相关虚拟主机配置文件,确保 DocumentRoot 指向了正确的目录。

检查 Nginx 配置:

检查 /etc/nginx/sites-available/default 或其他相关配置文件,确保 root 指向了正确的目录。

重启 Web 服务器:

如果做了任何配置修改,记得重启 Web 服务器:

sudo systemctl restart apache2   # Apache

sudo systemctl restart nginx     # Nginx

4. URL 重写(Rewrite)问题

如果服务器上启用了 URL 重写(如 Apache 的 mod_rewrite),可能会影响对 info.php 文件的访问。检查 .htaccess 文件中是否有任何可能导致请求被重定向或阻止的规则。

检查 .htaccess 文件:

确保 .htaccess 中没有错误的重写规则。可以临时禁用 .htaccess 文件,看看是否能正常访问 info.php。

5. 缓存问题

如果你的服务器配置正确且文件存在,可能是浏览器缓存或代理缓存导致了访问问题。尝试清除浏览器缓存或使用无痕模式访问。

6. PHP 没有正确安装或配置

如果你的 info.php 文件包含 PHP 代码(如 phpinfo()),确保服务器上已正确安装 PHP,并且 Web 服务器已配置支持 PHP。

检查 PHP 是否安装:

php -v

如果 PHP 没有安装或配置不正确,安装并配置 PHP:

sudo apt install php libapache2-mod-php   # 对于 Apache

sudo apt install php-fpm                  # 对于 Nginx

总结:

确保 info.php 文件存在并且路径正确。

检查文件权限,确保 Web 服务器可以读取该文件。

检查 Web 服务器的配置,确保 DocumentRoot 或 root 指向正确的目录。

如果启用了 URL 重写,检查 .htaccess 文件或 Nginx 配置。

确保 PHP 已正确安装和配置,能正常解析 PHP 文件。

步骤 9: 删除测试文件

为了安全考虑,完成验证后删除测试文件:

rm /var/www/html/info.php

总结

通过以上步骤,你已经在 CentOS 7 上成功安装并配置了 PHP 7.4 和 PHP-FPM。如果你使用 Nginx 作为 Web 服务器,还可以配置它来处理 PHP 请求。

在一些 Linux 发行版中(例如 Ubuntu),`/etc/nginx/snippets` 目录通常包含了常用的配置片段(例如 `fastcgi-php.conf` 和 `ssl-params.conf`),这些配置片段可用于简化常见配置。**但是**,并非所有 Nginx 安装都会包含 `snippets` 目录,这主要取决于您的系统和 Nginx 的安装来源(例如官方源 vs 自编译)。

如果您没有 `snippets` 目录,可能有以下原因:

1. 安装包差异:某些 Nginx 安装包(尤其是直接从 Nginx 官方源或手动编译安装的版本)可能没有创建该目录或没有提供相关配置片段。

2. Nginx 版本差异:不同版本的 Nginx 或不同的 Linux 发行版在配置文件结构上有所差异。有些发行版(如 CentOS 或直接从 Nginx 源安装)可能没有 `snippets` 目录。

3. 系统特定的文件结构:一些系统和 Web 服务器软件包可能会选择不提供额外的配置片段,简化配置目录。

如何解决

如果需要使用 `snippets` 中的配置文件,可以手动创建 `snippets` 目录,并自行编写相关的配置文件内容。以下是几个操作方法:

1. 手动创建 `snippets` 目录

在您的 Nginx 配置目录中手动创建 `snippets` 目录,并添加所需的配置文件。例如:

sudo mkdir -p /etc/nginx/snippets

2. 创建 `fastcgi-php.conf` 文件

然后可以在 `/etc/nginx/snippets/` 目录下创建 `fastcgi-php.conf` 文件,将常用的 FastCGI 参数放入其中:

sudo nano /etc/nginx/snippets/fastcgi-php.conf

将以下内容添加到该文件中:

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

include fastcgi_params;

保存文件后,就可以在 Nginx 配置中使用 `include snippets/fastcgi-php.conf;` 引入该文件了。

3. 或直接在配置文件中写入参数

如果您不想创建额外的 `snippets` 目录,也可以将这些 FastCGI 参数直接写入您的 Nginx 配置文件中(如 `/etc/nginx/nginx.conf` 或具体站点配置文件)。

http://www.xdnf.cn/news/8227.html

相关文章:

  • 2025海外短剧CPS系统开发指南:高付费市场解析与增速全景图
  • 【CSS】九宫格布局
  • openEuler 22.03 LTS-SP3 系统安装 docker 26.1.3、docker-compose
  • 微信小程序之Promise-Promise初始用
  • 笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数
  • 重读《人件》Peopleware -(11)Ⅱ 办公环境 Ⅳ 插曲:生产力测量与不明飞行物
  • Nginx核心功能
  • 【Linux系统】冯诺依曼体系结构 和 操作系统的介绍
  • Ctrl+鼠标滚动阻止页面放大/缩小
  • QFileDialog::getSaveFileName导致系统崩溃
  • Go语言gopacket库的HTTP协议分析工具实现
  • 学习人工智能:从0到1的破局指南与职业成长路径
  • vue3+vue-flow实现拖拽矩形框,端点连线,自定义宽高
  • BGP为什么要配置对等IP?
  • PyInstaller入门
  • 如何看navicat数据库连接的密码
  • C++效率掌握之STL库:unordered_map unordered_set底层剖析
  • JavaScript【8】异步请求与本地存储
  • 巢票赛演协议逆向分析
  • 建设工程窝工、停工损失案件庭审发问提纲
  • [Dify] 在Dify中优雅处理本地部署LLM的Token超限问题
  • TransMorph:用于无监督医学图像配准的变压器
  • 网络编程中的 Protobuf 和 JsonCpp 全面解析
  • 视频监控管理平台EasyCVR结合AI分析技术构建高空抛物智能监控系统,筑牢社区安全防护网
  • Dify-4:API 后端架构
  • C#学习11——集合
  • 电机试验平台:实现高效精密测试的关键工具
  • 蓝桥杯 10. 安全序列
  • 今日行情明日机会——20250522
  • Linux 部署 RocketMQ