You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NGINX PHP FastCGI多location(alias)配置问题求助

排查Nginx第二个Location块返回‘File not found.’的问题

Hey there! 刚接触相关技术不用慌,咱们一步步来拆解这个问题~既然你已经把全局PHP配置移到location块里,第一个块正常工作,那问题大概率出在第二个location的路径配置、PHP处理规则或者权限上,下面给你几个具体的排查方向和解决方案:

1. 核对第二个Location的根目录与PHP路径参数

最常见的原因是SCRIPT_FILENAME参数配置错误,或者root路径指向不对。举个正确的配置示例,假设你的第二个location是处理/api路径的请求:

location /api {
    # 这里要确保root指向的是/api对应文件的实际存储目录
    root /var/www/mydomain/api;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 这里要和你实际的PHP-FPM套接字/端口一致
        fastcgi_index index.php;
        # 关键:必须用$document_root拼接脚本名,它会自动取当前location的root路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

如果你的SCRIPT_FILENAME用了固定路径或者错误的变量(比如直接写死/var/www/html$fastcgi_script_name),就会导致PHP去错误的路径找文件,从而返回“File not found.”。

2. 检查目录与文件的权限

Nginx运行用户(通常是www-data)需要有目标目录和文件的读取权限

  • 先确认目录存在:ls -ld /path/to/your/second/location/root
  • 切换到Nginx用户测试访问:sudo -u www-data ls /path/to/your/second/location/root/test.php
    如果这条命令报错,说明权限不足,你可以用以下命令调整:
# 更改目录和文件的所有者为Nginx用户
sudo chown -R www-data:www-data /path/to/your/second/location/root
# 设置合理的权限(目录755,文件644)
sudo chmod -R 755 /path/to/your/second/location/root
sudo find /path/to/your/second/location/root -type f -exec chmod 644 {} \;

3. 查看Nginx错误日志找线索

错误日志里会有最详细的报错信息,比如具体是哪个路径找不到文件。你可以查看日志:

tail -f /var/log/nginx/error.log

然后再发起一次请求,就能看到具体的错误路径,这能帮你快速定位是路径写错了还是权限问题。

如果以上步骤还没解决问题,建议你把完整的Nginx server配置块贴出来,这样我能更精准地帮你排查~

内容的提问来源于stack exchange,提问作者PBX

火山引擎 最新活动