You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置alias指向单个PHP文件返回404(其他文件正常)

Nginx配置alias指向单个PHP文件返回404(其他文件正常)

我之前也踩过这个坑!其实问题出在Nginx的alias指令和FastCGI结合时的路径解析逻辑上,普通静态文件的alias逻辑没问题,但PHP文件需要经过PHP-FPM处理,参数配置稍有不慎就会导致404。

核心原因

当你用location /netbootassets/fragment.php匹配单个PHP文件时,虽然alias能正确映射静态文件路径,但FastCGI的SCRIPT_FILENAME参数可能没有被正确传递给PHP-FPM——要么是fastcgi-php.conf里的默认配置覆盖了你的设置,要么是变量解析时出现了路径偏差,导致PHP-FPM找不到实际的文件。

解决方法

这里给你两个靠谱的解决方案:

方案1:直接写死SCRIPT_FILENAME路径(最稳妥)

把SCRIPT_FILENAME直接指定为PHP文件的实际路径,同时给location加上=做精确匹配,避免其他规则干扰:

location = /netbootassets/fragment.php {
  alias /opt/easy_multi_pxe/scripts/fragment.php;
  include snippets/fastcgi-php.conf;
  # 直接指定实际文件路径,彻底避免变量解析问题
  fastcgi_param SCRIPT_FILENAME /opt/easy_multi_pxe/scripts/fragment.php;
  fastcgi_pass unix:/run/php/php-fpm.sock;
}

方案2:用$request_filename但调整参数顺序

如果你不想写死路径,可以保留$request_filename,但要把你的fastcgi_param配置放在include snippets/fastcgi-php.conf之后,确保覆盖默认配置:

location = /netbootassets/fragment.php {
  alias /opt/easy_multi_pxe/scripts/fragment.php;
  include snippets/fastcgi-php.conf;
  # 放在include之后,确保覆盖默认的SCRIPT_FILENAME设置
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_pass unix:/run/php/php-fpm.sock;
}

额外检查项

最后别忘了确认两个关键点:

  • PHP-FPM运行的用户(比如常见的www-data)是否有读取/opt/easy_multi_pxe/scripts/fragment.php的权限
  • 检查文件路径的拼写,Linux系统路径是区分大小写的,别不小心写错了

备注:内容来源于stack exchange,提问作者Janne Paalijarvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:03:16