CentOS下Nginx与PHP的配置实践
环境准备
首先确保系统为CentOS 8(以最新稳定版为例),通过命令检查版本:

cat /etc/redhat-release
若版本不符,可通过官方文档调整安装步骤。
更新系统与安装工具
# 更新系统包 sudo dnf update -y # 安装Yum(CentOS 8默认为DNF,但部分命令仍需Yum工具) sudo dnf install yum-utils -y
配置Yum源(CentOS 8需启用EPEL仓库)
# 安装EPEL源 sudo dnf install epel-release -y
启用后,Yum可访问更多第三方软件包,包括PHP相关组件。
安装Nginx
Nginx作为Web服务器,需通过系统包管理器安装:
# 安装Nginx sudo dnf install nginx -y # 启动并启用服务(开机自启) sudo systemctl start nginx sudo systemctl enable nginx # 检查服务状态 sudo systemctl status nginx
安装PHP及扩展
PHP是服务器端脚本语言,需配合Nginx的FastCGI模块运行。
安装PHP核心组件
# 安装PHP及常用扩展(如MySQLi、GD等) sudo dnf install php-fpm php-cli php-common php-mysqlnd php-gd php-curl php-json -y
启动PHP-FPM服务
# 启动PHP-FPM sudo systemctl start php-fpm sudo systemctl enable php-fpm # 检查状态 sudo systemctl status php-fpm
配置PHP-FPM
PHP-FPM负责接收PHP请求并将其传递给PHP解析器,需调整配置文件以适配Nginx:
修改主配置文件
# 编辑PHP-FPM主配置 sudo vim /etc/php-fpm.d/www.conf
修改以下参数(以CentOS 8为例):

# 用户和组 user = nginx group = nginx # 监听方式(推荐使用socket) listen = /var/run/php-fpm/php-fpm.sock # 进程数(可根据服务器性能调整) pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
重启PHP-FPM
sudo systemctl restart php-fpm
配置Nginx支持PHP
Nginx通过FastCGI模块与PHP-FPM通信,需在配置文件中添加PHP处理规则。
创建PHP专用配置文件
# 在Nginx配置目录下创建php.conf sudo vim /etc/nginx/conf.d/php.conf
# 处理.php文件的location规则
location ~ .php$ {
# 引入FastCGI通用配置
include snippets/fastcgi-php.conf;
# 指向PHP-FPM的监听地址
fastcgi_pass php-fpm;
# 设置PHP脚本路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 传递路径信息(用于路由)
fastcgi_param PATH_INFO $fastcgi_path_info;
}修改主配置文件
# 编辑Nginx主配置 sudo vim /etc/nginx/nginx.conf
确保包含以下行(位于http块内):
include /etc/nginx/conf.d/*.conf;
重启Nginx
sudo systemctl restart nginx
测试部署
验证配置是否生效,需创建一个简单的PHP测试文件:
创建测试文件
# 在网站根目录创建phpinfo.php sudo echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
测试访问
通过浏览器访问:
http://服务器IP/phpinfo.php若显示PHP信息页面,说明配置成功。
常见问题与优化
PHP无法解析问题
- 原因:PHP配置文件
php.ini中cgi.fix_pathinfo参数未设为0。 - 解决:
cgi.fix_pathinfo = 0
修改后重启PHP-FPM:

sudo systemctl restart php-fpm
Nginx无法找到PHP文件
- 原因:
fastcgi_pass参数指向错误(如未启动PHP-FPM或监听地址不匹配)。 - 解决:检查PHP-FPM是否运行,并确保Nginx配置中的
fastcgi_pass与PHP-FPM监听地址一致(如php-fpm或php-fpm:9000)。
FAQs
Q1:如何解决PHP无法正常解析?
A1:检查php.ini中的cgi.fix_pathinfo参数,将其设置为0(默认为1,可能导致路径解析问题)。
示例:
cgi.fix_pathinfo = 0
修改后重启PHP-FPM:
sudo systemctl restart php-fpm
Q2:Nginx如何配置多个PHP站点?
A2:在/etc/nginx/conf.d/目录下创建多个配置文件,每个文件定义一个server块,分别设置不同的root目录和location规则。
示例:
# 站点1:默认首页
server {
listen 80;
server_name example.com;
root /var/www/html1;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php-fpm;
}
}
# 站点2:子域名
server {
listen 80;
server_name sub.example.com;
root /var/www/html2;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php-fpm;
}
}重启Nginx后,两个站点均可独立运行。
步骤覆盖了CentOS下Nginx与PHP的完整配置流程,通过分步操作可快速搭建Web开发环境,若需进一步优化(如负载均衡、SSL配置),可参考Nginx官方文档或后续扩展内容。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/199899.html


