温馨提示×

Ubuntu PHP日志中404错误怎么查

小樊
44
2025-11-22 06:17:25
栏目: 编程语言

Ubuntu 环境下排查 PHP 相关 404 的实用步骤

一、先分清日志类型与定位路径

  • 404 本质是 HTTP 状态码,优先到 Web 服务器的访问日志确认请求是否真的返回 404;PHP 错误日志通常记录解析/执行错误,未必会记录 404。
  • 常见日志路径与用途(Ubuntu 常见):
    • Apache
      • 访问日志:/var/log/apache2/access.log(用于确认 404 请求的 URL、时间、来源)
      • 错误日志:/var/log/apache2/error.log(用于查看重写、权限、脚本启动等错误)
    • Nginx
      • 访问日志:/var/log/nginx/access.log
      • 错误日志:/var/log/nginx/error.log
    • PHP-FPM
      • 错误日志:常见为 /var/log/php-fpm.log/var/log/php7.x-fpm.log(按实际版本),或 /var/log/php-fpm/error.log
    • PHP 自身 error_log
      • 若 php.ini 中自定义了 error_log,需到该自定义路径查看(可能与 Web 服务器日志分离)
  • 快速查看命令示例:
    • 实时看访问日志:sudo tail -f /var/log/apache2/access.log
    • 实时看错误日志:sudo tail -f /var/log/apache2/error.log
    • 查找 404:grep " 404 " /var/log/apache2/access.log | less
  • 若不确定 PHP 错误日志位置,可在 CLI 执行:php -i | grep ‘Loaded Configuration File’ 定位 php.ini,再查其中的 error_log 配置项。

二、从访问日志快速定位 404 请求

  • 确认是否为真实 404:
    • 命令:grep " 404 " /var/log/apache2/access.log | tail -n 20
    • 关注字段:客户端 IP、请求 时间、请求 方法URI、返回 状态码 404User-AgentReferer(便于追溯来源与死链)。
  • URI/路径聚合统计,找出高频缺失资源:
    • 命令:grep " 404 " /var/log/apache2/access.log | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head
  • 结合 Referer 找出外部链接导致的死链:
    • 命令:grep " 404 " /var/log/apache2/access.log | awk -F" ‘{print $4}’ | sort | uniq -c | sort -nr | head
  • 实时监控新产生的 404:
    • 命令:tail -f /var/log/apache2/access.log | grep --line-buffered " 404 "

三、结合错误日志与 PHP 配置确认根因

  • 查看 Apache/Nginx 错误日志是否有重写或权限类报错(如 .htaccess 规则错误、目录无索引、权限不足):
    • 命令:sudo tail -f /var/log/apache2/error.log 或 sudo tail -f /var/log/nginx/error.log
  • 查看 PHP-FPM 日志是否有进程启动、执行失败等问题(如脚本不存在、权限被拒、FPM 配置异常):
    • 命令:sudo tail -f /var/log/php7.x-fpm.log 或 sudo tail -f /var/log/php-fpm/error.log
  • 核对 php.ini 的 error_log 配置,确保 PHP 错误被记录到预期文件;必要时在排查期间临时开启 log_errors = On,开发环境可开启 display_errors = On(生产环境请勿开启以免泄露敏感信息)。

四、常见成因与对应修复

  • URL/路由错误:路径大小写、多余斜杠、资源已迁移;修正前端/路由配置或创建重定向。
  • 重写规则不当(Apache 的 .htaccess,Nginx 的 rewrite):检查规则是否覆盖到目标路径,必要时修正或回退默认。
  • 文件或目录不存在/路径错误:确认请求的文件在 DocumentRootAlias 映射目录下,路径大小写与真实文件一致。
  • 权限问题:确保 Web 服务用户对文件/目录具备读取(目录需可执行)权限,常见为文件 644、目录 755
  • 入口文件缺失或路由未命中(如前端路由 SPA、框架路由):配置服务器将所有请求指向入口文件(如 index.php),由框架处理路由。
  • 缓存/代理导致误判:清理浏览器与 CDN/反向代理 缓存后复测。

五、高效排查命令清单

  • 同时跟踪访问与错误日志:sudo multitail /var/log/apache2/access.log /var/log/apache2/error.log
  • 统计 Top 10 404 URI:grep " 404 " /var/log/apache2/access.log | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head
  • 统计 Top 10 404 来源页:grep " 404 " /var/log/apache2/access.log | awk -F" ‘{print $4}’ | sort | uniq -c | sort -nr | head
  • 过滤某时间段的 404:grep " 404 " /var/log/apache2/access.log | grep “10/Nov/2025:14” | less
  • 确认 PHP 错误日志位置:php -i | grep ‘Loaded Configuration File’;grep -i error_log /etc/php/*/fpm/php.ini
  • 实时查看 PHP-FPM 错误:sudo tail -f /var/log/php7.4-fpm.log(按实际版本替换)

0