引言

Nginx 是一款高性能的 HTTP 和反向代理服务器,常与 PHP 配合使用来构建动态网站。然而,在配置 Nginx 时,可能会遇到各种问题,其中最常见的就是 PHP 404 页面找不到的问题。本文将详细解析导致该问题的原因,并提供相应的解决方法。

常见原因

  1. 路径配置错误:Nginx 的 location 配置不正确,导致无法正确访问 PHP 文件。
  2. PHP-FPM 配置不正确:PHP-FPM 是一个 PHP FastCGI 实现,如果其配置不当,也会导致 PHP 404 错误。
  3. 文件权限问题:PHP 文件或目录权限设置不正确,导致 Nginx 无法访问。
  4. 模块未启用:Nginx 中的 fastcgi_pass 模块未启用。

解决方法

1. 检查路径配置

首先,确保 location 配置正确。以下是一个简单的 Nginx 配置示例:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /var/www/html;
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include        /etc/nginx/fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

确保 root 指向网站根目录,index 指定默认首页,try_files 优先尝试直接访问文件。

2. 检查 PHP-FPM 配置

PHP-FPM 的配置文件通常位于 /etc/php/7.4/fpm/pool.d/www.conf(以 PHP 7.4 为例)。确保以下配置正确:

[www]
user = www
group = www
listen = /run/php/php7.4-fpm.sock
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35

确保 listen 指向正确的套接字文件。

3. 检查文件权限

确保 Nginx 进程(通常为 www-data 用户)具有访问网站根目录及其内容的权限。可以使用以下命令更改文件权限:

sudo chown -R www-data:www /var/www/html
sudo chmod -R 755 /var/www/html

4. 启用 fastcgi_pass 模块

fastcgi_pass_module = dynamic;

结论

通过以上步骤,您应该能够解决 Nginx 配置失误导致的 PHP 404 页面找不到问题。如果问题仍然存在,请检查其他可能的原因,如服务器防火墙设置或 DNS 配置。