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

DigitalOcean部署Laravel应用所有路由返回Nginx 404错误如何解决?

Nginx配置错误导致Laravel路由全部404的解决方法

问题根源

你当前生效的HTTPS 443端口server块中,路由请求处理规则不符合Laravel的运行要求:Laravel所有非静态资源请求都需要通过public/index.php入口文件处理,你当前配置里location /段的try_files规则匹配不到文件时直接返回404,没有将请求转发到Laravel入口文件,因此除根域名外所有路由都会触发Nginx 404。

3个server块的作用说明

  • 第一个监听80端口的default_server块:完全不生效。第三个server块同样监听80端口,且明确指定了server_name proclubs.app www.proclubs.app,域名匹配优先级高于默认服务,访问域名的HTTP请求不会走这个块,可直接删除。
  • 第二个监听443端口的块:用户访问HTTPS站点时实际生效的块,是配置错误的核心位置。
  • 第三个监听80端口的块:Certbot自动生成的规则,作用是将所有HTTP请求301重定向到HTTPS,逻辑正确无需修改。

修复步骤

1. 修改443端口server块配置

将第二个监听443端口的server块替换为以下配置:

server {
    root /var/www/proclubs/public;
    index index.php index.html index.htm;
    charset utf-8;

    server_name proclubs.app www.proclubs.app; # managed by Certbot

    # Laravel安全头
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    location / {
        # 匹配不到静态资源则转发到Laravel入口
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # Laravel接管404错误
    error_page 404 /index.php;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # 禁止访问隐藏文件,排除.well-known用于证书续期
    location ~ /\.(?!well-known).* {
        deny all;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/proclubs.app/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/proclubs.app/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

2. 校验配置并重载Nginx

执行以下命令验证配置语法是否正确,确认无误后重载配置生效:

sudo nginx -t
sudo systemctl reload nginx

3. 可选排查项

如果修改后仍无法正常访问,可依次检查:

  • 站点目录权限是否正确:sudo chown -R www-data:www-data /var/www/proclubs
  • PHP-FPM服务运行状态:sudo systemctl status php7.4-fpm
  • Laravel配置:执行php artisan route:clear清空路由缓存,确认.env文件中APP_URL已改为https://proclubs.app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:02