根本原因是nginx未将.php请求转发给php-fpm处理;需确认php-fpm已运行、location ~ .php$块存在且含fastcgi_pass与script_filename等关键参数,并确保root路径正确、权限合理、服务重载生效。

PHP文件被Nginx当作静态文件下载(而不是执行解析),根本原因是Nginx未正确将 .php 请求转发给PHP-FPM处理。常见于新装环境、配置遗漏或路径不匹配。修复核心是确保 location ~ \.php$ 块存在且内部包含正确的 fastcgi_pass、fastcgi_param 等指令。
检查并启用PHP-FPM服务
PHP文件要执行,必须有PHP-FPM(或CGI)在后台运行:
- 确认PHP-FPM已安装:运行
php-fpm -v或systemctl list-units | grep php - 启动并设为开机自启(以Ubuntu/Debian为例):
sudo systemctl start php7.4-fpm(版本按实际调整,如php8.1-fpm)sudo systemctl enable php7.4-fpm - 验证监听状态:
sudo ss -tlnp | grep ':9000'(默认监听127.0.0.1:9000或/run/php/php7.4-fpm.sock)
修正Nginx站点配置中的PHP处理块
在你的站点配置文件中(如 /etc/nginx/sites-enabled/default 或 /etc/nginx/conf.d/your-site.conf),确保包含以下标准PHP处理逻辑(推荐使用 Unix socket,更安全高效):
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # ✅ 改为你的PHP-FPM实际socket路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
若无 snippets/fastcgi-php.conf,可手动补全关键参数(等效写法):
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
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;
include fastcgi_params;
}
验证文档根目录与文件权限
Nginx需能读取PHP文件,PHP-FPM需能访问该文件及运行时目录:
- 确认
root指令指向正确路径,例如:root /var/www/html; - PHP文件(如
/var/www/html/info.php)需存在且可读:ls -l /var/www/html/info.php→ 权限建议-rw-r--r-- - Nginx用户(通常为
www-data或nginx)需对目录有执行(x)权限:sudo chmod 755 /var/www/html - PHP-FPM池配置中
user和group应与Nginx用户一致(如都为www-data),检查:/etc/php/7.4/fpm/pool.d/www.conf中的user = www-data、group = www-data
重载服务并测试
完成修改后,务必逐级验证:
- 语法检查:
sudo nginx -t→ 显示success才继续 - 重载Nginx:
sudo systemctl reload nginx - 重启PHP-FPM(尤其修改过其配置):
sudo systemctl restart php7.4-fpm - 创建测试文件:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php - 浏览器访问
http://your-server-ip/info.php—— 应显示PHP信息页,而非下载弹窗
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











