NodeJS NGINX代理转发POST请求给出405(不允许)

11dmarpk  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(265)

我正在从我的前端应用程序发出一个post请求,请求运行在服务器上的节点应用程序并侦听4001端口。请求看起来像:https://domain.name.com:4001/login-和wokrs罚款。我想隐藏一个端口,并在NGINX中进行转发,这样在我的前端应用程序中,我就可以像https://domain.name.com/login一样发出请求。
我已经尝试了这个NGINX配置,但它不工作,仍然得到错误405(NotAllow):

server {

    listen 443 ssl default_server;

    listen [::]:443 ssl default_server;

 

    server_name domen.name.com;

 

    ssl_certificate /etc/nginx/certificate/domain.crt;

    ssl_certificate_key /etc/nginx/certificate/domain.key;

 

    root /mnt/storage/app/frontend/build;

    index index.php index.html index.htm index.nginx-debian.html;

 

    location ~ ^/ {

        try_files $uri $uri/ /index.html;

                                                     

    }

    location /login {

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_pass http://127.0.0.1:4001/login;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

        proxy_method POST;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

}

字符串
405 =200 $uri;- 没用

txu3uszq

txu3uszq1#

您面临的问题可能与POST请求方法的处理有关。默认情况下,NGINX按原样转发请求方法,但某些应用程序或API可能不支持在执行代理时直接转发某些方法(例如POST)。
要解决此问题,您可以尝试以下操作:
删除此行,而不是指定proxy_method POST;。默认情况下,NGINX将转发原始请求方法。
/login位置块中添加proxy_set_header X-Forwarded-Method $request_method;,以设置X-Forwarded-Method头,这将跟踪原始请求方法。

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name domen.name.com;

    ssl_certificate /etc/nginx/certificate/domain.crt;
    ssl_certificate_key /etc/nginx/certificate/domain.key;

    root /mnt/storage/app/frontend/build;
    index index.php index.html index.htm index.nginx-debian.html;

    location ~ ^/ {
        try_files $uri $uri/ /index.html;
    }

    location /login {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:4001/login;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Method $request_method; # Add this line
    }
}

字符串
更新配置后,不要忘记重新启动或重新加载NGINX服务器以应用更改:

sudo systemctl restart nginx

相关问题