Nginx无法找到index.php始终返回404 Not Found,配置问题求助
Nginx访问index.php返回404的常见原因及解决方法
1. 路径与权限类问题
- 确认站点根目录文件存在:执行命令
ls -l /var/www/ilias/index.php,检查对应路径下确实存在index.php文件。 - 修正目录权限:Nginx默认运行用户为www-data,需要持有站点目录的读取权限,执行以下命令修正权限:
chown -R www-data:www-data /var/www/ilias chmod -R 755 /var/www/ilias
- 匹配域名与server_name规则:如果你是直接用IP访问服务,当前配置的
server_name仅匹配example.com和www.example.com,请求会走Nginx默认server块,根目录不一致就会返回404。测试阶段可以把监听规则改成listen 80 default_server; listen [::]:80 default_server;,让该配置作为默认规则生效。
2. PHP-FPM相关配置问题
- 确认PHP版本与sock路径匹配:执行命令
ls /var/run/php/查看实际存在的fpm sock文件名,如果你安装的PHP版本不是7.2,把fastcgi_pass参数里的sock路径改成对应版本即可。 - 确认PHP-FPM服务正常运行:执行命令
systemctl status php7.2-fpm查看服务状态,未启动则执行systemctl start php7.2-fpm启动,加systemctl enable php7.2-fpm可设置开机自启。 - 修复FastCGI参数冲突:你同时引入了
snippets/fastcgi-php.conf和fastcgi_params,多数系统的这两个文件存在SCRIPT_FILENAME参数重复定义的问题,会导致PHP找不到执行文件返回404,可调整PHP匹配块的配置如下:
location ~ \.php$ { # 手动指定脚本执行路径优先级最高,避免参数冲突 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 删掉重复的 include fastcgi_params; 避免参数覆盖 fastcgi_intercept_errors on; }
3. 配置生效与日志排查
修改完配置后必须执行 nginx -t 检查语法是否正确,返回success后执行 systemctl reload nginx 重载配置生效。如果仍然返回404,直接查看你配置中指定的错误日志 /var/log/nginx/ilias.error.log,日志会明确标注404的具体触发原因。
内容的提问来源于stack exchange,提问作者alessio
相关产品推荐
相关产品推荐

