运维工程师技术之nginx搭配php

出现"File not found."的核心原因是 fastcgi_param SCRIPT_FILENAME配置错误,导致PHP-FPM找不到对应的PHP文件。以下是具体分析和修复方案:

一、直接原因:SCRIPT_FILENAME路径错误

你配置中的这一行:

nginx 复制代码
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

是Nginx默认的错误写法------/scripts是一个不存在的目录,而你的PHP文件实际在/app/code/zbx目录下。

当Nginx把请求转发给PHP-FPM时,会告诉它"要执行的文件在/scripts/xxx.php",但这个路径根本不存在,所以PHP-FPM返回"File not found."。

二、修复步骤

1. 修正SCRIPT_FILENAME参数

将/scripts改为$document_root(自动关联当前配置的root目录),同时补充root和try_files指令(确保路径正确):

nginx 复制代码
location ~ \.php$ {
    root /app/code/zbx;  # 必须和上面location /的root一致,指定PHP文件所在目录
    try_files $uri =404; # 先检查文件是否存在,不存在直接返回404(避免无效请求)
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    # 关键修正:用$document_root获取当前root目录,正确指向PHP文件
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
2. 补充index的优先级(可选但建议)

将index中的index.php放到前面,优先解析PHP索引页:

nginx 复制代码
location / {
    root /app/code/zbx;
    index  index.php index.htm;  # 把index.php放前面
}

三、修复后的完整配置

nginx 复制代码
server {
    listen       80;
    server_name  localhost www.zbx888.com;

    location / {
        root /app/code/zbx;
        index  index.php index.htm;  # 优先解析PHP索引页
        try_files $uri $uri/ /index.php$is_args$args; # 处理PHP项目路由
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # 修复后的PHP解析块
    location ~ \.php$ {
        root /app/code/zbx;  # 和项目根目录一致
        try_files $uri =404; # 检查文件是否存在
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 禁止访问隐藏文件(提升安全性)
    location ~ /\.ht {
        deny  all;
    }
}

四、验证与生效

  1. 检查配置语法:

    bash 复制代码
    nginx -t

    输出"test is successful"说明语法正确。

  2. 重启Nginx:

    bash 复制代码
    systemctl restart nginx
  3. 确认PHP文件存在 :

    确保/app/code/zbx目录下有index.php(或你访问的PHP文件):

    bash 复制代码
    ls -l /app/code/zbx/index.php

五、额外排查(若仍报错)

如果修复后还是"File not found.",检查:

  • PHP-FPM的用户权限 :PHP-FPM默认以apache或nginx用户运行,需确保该用户能读取/app/code/zbx下的文件:

    bash 复制代码
    chown -R nginx:nginx /app/code/zbx
    chmod -R 755 /app/code/zbx
  • SELinux限制 :临时关闭SELinux测试(生产环境需配置规则):

    bash 复制代码
    setenforce 0

修复后,浏览器访问www.zbx888.com就能正常解析PHP文件了。

相关推荐
中屹指纹浏览器svip1 天前
指纹浏览器RPA自动化靠谱吗?先分清适用边界
运维·自动化·rpa
zuiyuewentian1 天前
借助 AI 在 Win11 上搭建 Rocky Linux:用 Visual Studio 直接调试 Linux 服务
linux·运维·visual studio
牢姐与蒯1 天前
WSL2 迁移教程:把Ubuntu+WSL2从C盘挪到别的盘
linux·运维·服务器·网络·ubuntu·1024程序员节
zxanz11 天前
证书运维自动化,守住业务 HTTPS 底线
运维·https·自动化
vipxieliang1 天前
Service Mesh 可观测性:分布式追踪、指标与日志的统一方案
运维
vipxieliang1 天前
Laravel 框架内核:请求生命周期、IoC 容器与中间件管道(附 ThinkPHP 选型对比)
php
忆~遂愿1 天前
极空间部署XiaoMusic:把NAS里的本地音乐接入小爱音箱,搜索、播放和远程控制一起完成
php
ESDWAN1 天前
SD-WAN 是什么?工作原理、适用场景与选型要点
开发语言·网络·数据库·架构·php
李纲明1 天前
WordPress 报 Allowed memory size exhausted:先抓堆栈找吃内存的插件,再改 memory_limit
性能优化·php·内存·插件·wordpress·devdiy
云飞云共享云桌面1 天前
智能装备工厂研发部门多设计师共享一台SolidWorks服务器做设备装配建模
运维·服务器·网络·人工智能·3d·自动化·制造