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

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` 或具体站点配置文件)。

相关文章:

  • git@gitee.com: Permission denied (publickey). fatal: 无法读取远程仓库
  • 基于单片机的室内采光及可燃气体泄漏报警装置设计
  • FastAPI在 Nginx 和 Docker 环境中的部署
  • 深入理解线程池:参数、流程与实战应用
  • Qt控件:输入控件
  • 地下水监测的施工与安装
  • 人工智能时代:从“知识容器”到“知识地图”的认知革命
  • 华为模拟器练习简单的拓扑图(2台三层交换机和8台pc)
  • 【知识图谱】数据处理与数据存储
  • 用对称化与chaining技术bound经验过程上确界的期望(Guntuboyina理论统计学笔记)
  • Three.js搭建小米SU7三维汽车实战(1)搭建开发环境
  • vue3定于组件名字的几种方法
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第十章
  • QT ui控件setEnabled(false) 作用
  • 亚马逊IEN新规避坑指南:两大申报盲区与合规策略解析
  • YOLOv5:调用官方权重进行检测
  • Appium 的 enableMultiWindows 参数
  • 甲骨文云服务器适合做网站吗
  • MCP Server Tool 开发学习文档
  • Veeam Backup 13 beta install
  • 个性化网站建设公司/企业网络营销目标
  • danbold做动漫的网站/百度竞价推广一个月多少钱
  • 廉江网站制作/金华网站推广
  • dede wap网站模板下载/专业黑帽seo
  • 学习网站建设的是什么专业/网站维护的内容有哪些
  • 网站维护总结/无锡seo网站管理