405错误与Lumen API和Nginx和我在我的智慧结束

eaf3rand  于 2023-03-07  发布在  Nginx
关注(0)|答案(1)|浏览(174)

我正在使用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的路由没有经过任何类型的身份验证中间件。
我现在精疲力竭,情绪混乱,因为我就是不能让它工作,我在网上也找不到解决办法。我发誓它昨天还工作,但无论我做了什么改变,它都完全坏了。
有人能告诉我我做错了什么吗,或者至少暗示一下还有什么要检查的,因为我已经疯了。

7cjasjjr

7cjasjjr1#

对于任何一个哭着问这个问题和掉头发的人来说,在处理这个问题大约8个小时后,我发现API子文件夹到php-fpm服务的重定向很糟糕。
在我最初的帖子中的例子中,'try_files'部分告诉服务器尝试根级别的文件,这在/API/ location部分中没有捕获,所以我不得不修改

try_files $uri $uri/ /index.php?$query_string;

try_files $uri $uri/ /api/public/index.php?$query_string;

这将错误从405错误修复为404错误。然后发生的是**$request_filename;**错误地解析为复制文件夹,因此我必须重置该节的根变量。最终结果如下:

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

    location ~ \.php$ {
        root /var/www/html;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }
}

总而言之,我从中获得的最好的知识是,为了调试nginx文件,使用如下代码行作为调试器:

return 200 $realpath_root$fastcgi_script_name; add_header Content-Type text/plain;

相关问题