我正在使用nginx在AWS Ubuntu EC2上开发一个有Angular 的前端和流明后端的网站。当我尝试向登录API端点发出POST命令时,它给了我一个“405不允许”错误,我不知道为什么,我迫切需要比我更了解的人的帮助。
这是我用于nginx服务器的代码
server {
listen 80;
listen [::]:80;
server_name ~~~~~~~~.compute-1.amazonaws.com;
server_tokens off;
client_max_body_size 10M;
location = /assets/favicon.ico {
access_log off; log_not_found off;
}
# The front end Angular
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html =404;
}
location /files/ {
root /var/www/html/files;
}
# The lumen API
location /api/ {
error_log /var/log/nginx/error.log debug;
root /var/www/html/api/public;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
}
(Note:我通常包含安全头,但为了隔离问题,我关闭了这些头。另外,我还没有为这个网站设置SSL证书)
当我尝试发布到'/API/auth/login'(或任何api端点)时,nginx错误日志输出如下:
2023/02/25 00:59:24 [debug] 371832#371832: *8 http cl:181 max:10485760
2023/02/25 00:59:24 [debug] 371832#371832: *8 rewrite phase: 3
2023/02/25 00:59:24 [debug] 371832#371832: *8 post rewrite phase: 4
2023/02/25 00:59:24 [debug] 371832#371832: *8 generic phase: 5
2023/02/25 00:59:24 [debug] 371832#371832: *8 generic phase: 6
2023/02/25 00:59:24 [debug] 371832#371832: *8 generic phase: 7
2023/02/25 00:59:24 [debug] 371832#371832: *8 access phase: 8
2023/02/25 00:59:24 [debug] 371832#371832: *8 access phase: 9
2023/02/25 00:59:24 [debug] 371832#371832: *8 access phase: 10
2023/02/25 00:59:24 [debug] 371832#371832: *8 post access phase: 11
2023/02/25 00:59:24 [debug] 371832#371832: *8 generic phase: 12
2023/02/25 00:59:24 [debug] 371832#371832: *8 try files handler
2023/02/25 00:59:24 [debug] 371832#371832: *8 http script var: "/api/auth/login"
2023/02/25 00:59:24 [debug] 371832#371832: *8 trying to use file: "/api/auth/login" "/var/www/html/api/public/api/auth/login"
2023/02/25 00:59:24 [debug] 371832#371832: *8 http script var: "/api/auth/login"
2023/02/25 00:59:24 [debug] 371832#371832: *8 trying to use dir: "/api/auth/login" "/var/www/html/api/public/api/auth/login"
2023/02/25 00:59:24 [debug] 371832#371832: *8 http script copy: "/index.php?"
2023/02/25 00:59:24 [debug] 371832#371832: *8 trying to use file: "/index.php?" "/var/www/html/api/public/index.php?"
2023/02/25 00:59:24 [debug] 371832#371832: *8 internal redirect: "/index.php?"
而我从网络服务器得到的只是405错误。
我试过了上面的各种不同的排列,但是我似乎找不到一个可以通过这个405错误的排列。我是不是找错地方了?
当我在本地运行它时,它是工作的,但不是在服务器上。
我仔细检查了数据库权限设置是否正确。
我仔细检查了/API/auth/login的路由没有经过任何类型的身份验证中间件。
我现在精疲力竭,情绪混乱,因为我就是不能让它工作,我在网上也找不到解决办法。我发誓它昨天还工作,但无论我做了什么改变,它都完全坏了。
有人能告诉我我做错了什么吗,或者至少暗示一下还有什么要检查的,因为我已经疯了。
1条答案
按热度按时间7cjasjjr1#
对于任何一个哭着问这个问题和掉头发的人来说,在处理这个问题大约8个小时后,我发现API子文件夹到php-fpm服务的重定向很糟糕。
在我最初的帖子中的例子中,'try_files'部分告诉服务器尝试根级别的文件,这在/API/ location部分中没有捕获,所以我不得不修改
到
这将错误从405错误修复为404错误。然后发生的是**$request_filename;**错误地解析为复制文件夹,因此我必须重置该节的根变量。最终结果如下:
总而言之,我从中获得的最好的知识是,为了调试nginx文件,使用如下代码行作为调试器: