laravel 应用程序所有路由突然出现意外 404 错误 - NGINX|PHP-FPM

laravel 应用程序所有路由突然出现意外 404 错误 - NGINX|PHP-FPM

我有以下 nginx 配置文件

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#


server {

    root /var/www/open_final/current;     
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name app.mypersonaldomain.co;
        if ($http_x_forwarded_proto != "https") {
          rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
        }

#        if ($http_user_agent ~* '(iPhone|iPod|android|blackberry)') {
#         return 301 https://mobile.mypersonaldomain.co;
#        }
    location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
        #       try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
}


server {

    root /var/www/open-backend-v2/current/public;
    index index.php index.html index.htm;

    server_name localhost v2-api.mypersonaldomain.co;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

我在这个 nginx 服务器上运行着两个应用程序。一个是 Laravel(PHP)应用程序,另一个是 Angular 应用程序(前端)。我注意到,上周,所有后端应用程序(PHP)路由都开始抛出 404 Not Found 错误。我重启了 nginx,但问题仍然存在。最后我重启了 aws 实例,它开始正常工作。昨天又突然出现这种情况,URL 突然开始抛出 404 错误,我不得不重启实例。

前端应用程序正在加载,但后端(Laravel-PHP)URL 抛出 404。

我怀疑是黑客干的。过去两年里没有发生过这种事,但从上周开始就出现了。

这可能是什么原因?是有人篡改了 .htaccess 文件还是与 nginx 配置有关。但如果是这样,为什么 laravel 应用程序路由显示 404。

需要帮助。这可能是什么原因?有人遇到过这个问题吗?

答案1

PHP FPM 服务一切正常吗?可能是该服务崩溃了,重启后又恢复了。

如果收到所有 404 错误以及日志,请检查服务状态

答案2

我看到您在一个 nginx.conf 中混合了 2 个域名。这非常混乱,因为现在我不知道您想要实现什么。我在我的许多网络服务器上使用 NginX,其中大多数服务器都服务于多个网站。在这些服务器上,我有一个很好的方法,多年来一直很好用,让我与您分享,以便您可以更清楚地了解。

首先将 nginx.conf 与 website.conf 分开。创建/etc/nginx/sites-available/etc/nginx/sites-enable。在 nginx.conf 中,我删除了所有server块,因此我知道只有我启用的网站才会提供服务,其他的都没有。只保留httpevents块以及那里的所有其他内容,例如user。注释掉http块中的 include 行,并根据以下内容添加新行:

        #include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*.conf;

现在创建一个新的配置文件/etc/nginx/sites-available/co.mypersonaldomain.mobile.conf。添加两个server块。第一个(如果你想将所有 HTTP 转发到 HTTPS 应该是这样的:

server {
       listen         80;
       server_name    app.mypersonaldomain.co;
       return         301 https://$server_name$request_uri;
}

第二个server块需要根据您的需要进行设置,我在这方面真的帮不上忙。但从您的配置中我可以告诉您,您可以跳过错误页面以及错误页面的位置,除非您使用的是自定义构建的。其余的都可以。此外,强烈建议使用自定义日志文件,而不是标准 NginX 日志,这样您就可以轻松地在服务器上区分您的网站,并且更易于维护。将这些行添加到您的第二个server块中

    error_log               /var/log/nginx/co.mypersonaldomain.mobile/error.log;
    access_log              /var/log/nginx/co.mypersonaldomain.mobile/access.log main;

此后,您只需sites-enabled用以下命令将此配置文件链接到文件夹即可:ln -s /etc/nginx/sites-available/co.mypersonaldomain.mobile.conf /etc/nginx/sites-enable。此外,请不要忘记为日志文件创建文件夹:mkdir /var/log/nginx/co.mypersonaldomain.mobile/

最后,你可以在激活 NginX 配置之前用 测试它们nginx -t。如果所有语法都正确,那么只需重新启动 NginX 即可。

我对您的目标的疑问在于v2-api.mypersonaldomain.co域名。很明显,您正在尝试将其用作后端并使用 API,并且您的配置看起来很酷,只需在 中为其创建一个单独的配置/etc/nginx/sites-available/co.mypersonaldomain.v2-api.conf并为自己创建即可。但是,您正在将用户从 重定向http://app.mypersonaldomain.cohttps://app.mypersonaldomain.co,但该域在当前配置中根本没有提供服务。

相关内容