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