NGINX配置异常:PHP脚本被返回为文本而非执行
解决Nginx直接返回PHP源码不执行的问题
核心问题定位
你的Nginx配置中,location /\.php$的写法错误,这只会匹配路径**恰好是/.php**的请求,而非所有以.php结尾的请求。这导致大部分PHP请求都进入静态文件处理逻辑,直接返回源码。
修正后的配置方案
1. 调整PHP请求的location匹配规则
将原location块改为正则匹配,并优化root路径配置:
server { # 把root放在server块,统一指定网站根目录 root /var/html/web; index index.php index.html index.htm; # 匹配所有以.php结尾的请求(区分大小写) location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; # 可选:防止Nginx转发不存在的PHP文件 try_files $uri =404; } # 静态文件基础处理 location / { try_files $uri $uri/ =404; } }
2. 关键配置说明
- 正则匹配
~ \.php$:确保所有以.php结尾的请求都进入该location,交给php-fpm处理;若需要忽略大小写,可改用~* \.php$。 - root放在server块:避免location内的root与server块root冲突,保证
$document_root变量指向正确的网站根目录。 try_files $uri =404:若请求的PHP文件不存在,直接返回404,避免php-fpm处理不存在的文件引发错误。
验证步骤
- 保存配置后,测试Nginx配置语法:
nginx -t
- 若语法正确,重新加载Nginx:
systemctl reload nginx
- 再次访问PHP脚本,确认是否正常执行而非返回源码。
额外排查点
- 确认PHP文件权限:确保
/var/html/web下的PHP文件对php-fpm运行用户(通常为www-data)有可读权限。 - 检查php-fpm日志:若问题仍存在,查看
/var/log/php7.4-fpm.log,排查是否有文件找不到或权限错误。
内容的提问来源于stack exchange,提问作者TAMPAx86
相关产品推荐
相关产品推荐

