Nginx单域名PHP文件被下载而非执行的故障排查求助
问题诊断与解决方案
PHP文件被浏览器当作下载文件,本质是Nginx未将请求转发至PHP-FPM处理,结合你的环境,按以下步骤排查:
1. 验证Nginx配置有效性
先检查配置语法是否正确,避免因语法错误导致Nginx未加载domain2的server块:
nginx -t
若输出报错,根据提示修复配置(比如检查括号、分号是否遗漏,注释格式是否正确)。同时确认domain2.conf已通过软链接放入/etc/nginx/sites-enabled/目录(Nginx默认仅加载该目录下的配置文件)。
2. 检查文件路径与权限
- 确认站点根目录存在且权限正确:
# 检查目录是否存在 ls -ld /usr/share/nginx/html/domain2.com # 设置正确权限(若权限不符) chown -R www-data:www-data /usr/share/nginx/html/domain2.com
- 验证PHP-FPM socket的访问权限:
ls -l /run/php/php7.4-fpm.sock
正常权限应为rw-rw---- www-data www-data,若不符,编辑/etc/php/7.4/fpm/pool.d/www.conf,修改listen.mode = 0660,然后重启PHP-FPM:
systemctl restart php7.4-fpm
3. 优化domain2的PHP处理配置
Debian/Ubuntu提供了预配置的fastcgi-php.conf片段,比手动编写更可靠,替换domain2.conf中的PHP location块:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; }
该片段已包含fastcgi_index和SCRIPT_FILENAME的正确设置,避免手动写路径出错。修改后重启Nginx:
systemctl restart nginx
4. 通过日志定位深层问题
查看domain2的错误日志,获取具体报错信息:
tail -f /var/log/nginx/domain2_error.log
- 若出现"no such file or directory":说明
SCRIPT_FILENAME指定的文件路径错误,或文件不存在; - 若出现权限相关错误:说明PHP-FPM进程无法读取站点文件,需调整目录/文件权限。
内容的提问来源于stack exchange,提问作者Matthai
相关产品推荐
相关产品推荐

