php是一种服务端脚本语言,网页形式的php文件无法直接被浏览器解析,需要依赖web服务器和php解析器配合才能运行。nginx本身不具备解析php的能力,需要通过php-fpm(php fastcgi进程管理器)来处理php请求,两者配合就能让php网页正常响应客户端访问。

环境准备与安装
安装nginx
不同系统的安装方式略有区别,以centos系统为例,执行以下命令安装nginx:
# 安装nginx yum install -y nginx # 启动nginx服务 systemctl start nginx # 设置开机自启 systemctl enable nginx
安装php及php-fpm
同样以centos为例,安装php和php-fpm组件:
# 安装php及常用扩展、php-fpm yum install -y php php-fpm php-mysql php-gd php-mbstring # 启动php-fpm服务 systemctl start php-fpm # 设置开机自启 systemctl enable php-fpm
nginx核心配置说明
nginx需要通过fastcgi协议将php请求转发给php-fpm处理,核心配置在nginx的站点配置文件中,默认路径为/etc/nginx/conf.d/default.conf,主要修改server块中的内容。
基础站点配置示例
以下是一个可以正常运行php网页的完整nginx配置示例:
server {
# 监听80端口
listen 80;
# 站点域名,本地测试可以用localhost
server_name localhost;
# 站点根目录,php文件需要放在这个目录下
root /usr/share/nginx/html;
# 默认索引文件,优先访问index.php
index index.php index.html index.htm;
# 处理php文件的请求
location ~ \.php$ {
# 转发给php-fpm的地址,默认php-fpm监听9000端口
fastcgi_pass 127.0.0.1:9000;
# 指定执行的脚本路径,这里用$document_root拼接请求的文件名
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi默认参数配置
include fastcgi_params;
}
}配置项说明
- root:指定站点文件存放的根目录,所有php、html等静态文件都需要放在这个目录下,否则会提示文件不存在。
- index:访问目录时默认加载的文件,把index.php放在最前面,访问域名时会优先尝试加载index.php。
- location ~ \.php$:正则匹配所有以.php结尾的请求,只有匹配到的请求才会被转发给php-fpm处理。
- fastcgi_pass:php-fpm的监听地址,默认是127.0.0.1:9000,如果php-fpm用的是sock文件监听,这里需要写对应的sock路径,比如
unix:/run/php-fpm/www.sock。 - fastcgi_param SCRIPT_FILENAME:告诉php-fpm要执行的脚本完整路径,这个参数必须配置正确,否则会出现"File not found"的错误。
验证php运行环境
配置完成后,在站点根目录/usr/share/nginx/html下创建一个测试php文件,比如index.php,内容如下:
<?php // 输出php环境信息 phpinfo(); ?>
修改完nginx配置后需要重载配置让更改生效:
# 检查nginx配置是否有语法错误 nginx -t # 重载nginx配置 systemctl reload nginx
打开浏览器访问http://localhost/index.php,如果能看到php的环境信息页面,说明php网页已经可以正常运行。
常见问题排查
访问php文件显示下载而不是直接执行
这是nginx没有把php请求转发给php-fpm导致的,检查location ~ \.php$块是否正确配置,是否遗漏了fastcgi相关的参数,或者正则匹配的规则写错了。
提示File not found
首先检查root目录是否正确,然后确认fastcgi_param SCRIPT_FILENAME的参数是否正确,也可以直接在服务器上检查对应的php文件是否存在,权限是否足够让nginx和php-fpm读取。
502 Bad Gateway错误
通常是php-fpm没有正常运行,检查php-fpm服务状态,确认fastcgi_pass的地址和php-fpm的监听地址是否一致,比如php-fpm监听的是sock文件,但是nginx配置里写的是127.0.0.1:9000,就会出现这个错误。
自定义php配置调整
如果需要调整php的运行参数,比如上传文件大小限制、脚本执行时间等,可以修改php的配置文件/etc/php.ini,常见调整项如下:
; 上传文件最大大小 upload_max_filesize = 20M ; POST请求最大大小 post_max_size = 20M ; 脚本最大执行时间,单位秒 max_execution_time = 30 ; 脚本最大内存占用 memory_limit = 128M
修改完php.ini后需要重启php-fpm服务让配置生效:
systemctl restart php-fpm
phpnginxphp-fpmweb_server_configuration修改时间:2026-06-02 23:04:14