![laravel 应用程序所有路由突然出现意外 404 错误 - NGINX|PHP-FPM](https://linux22.com/image/732394/laravel%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%89%80%E6%9C%89%E8%B7%AF%E7%94%B1%E7%AA%81%E7%84%B6%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%20404%20%E9%94%99%E8%AF%AF%20-%20NGINX%7CPHP-FPM.png)
我有以下 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
块,因此我知道只有我启用的网站才会提供服务,其他的都没有。只保留http
和events
块以及那里的所有其他内容,例如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.co
到https://app.mypersonaldomain.co
,但该域在当前配置中根本没有提供服务。