如何使用 nginx 将 post 请求传输到不同的端口?

How do I transfer post requests to a different port with nginx?

我想将所有 post 请求传输到端口 5000,因为我的 express 服务器就在那里 运行。 这是我目前的 nginx 配置:

server {
    if ($host = www.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80 default_server;
  server_name www.website.com;
  return 301 https://$server_name$request_uri;


}

server {
        listen 443 ssl;
        server_name www.website.com;
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed$
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # manag$

我知道我应该在编写代码之前考虑一下并将所有 post 请求发送到 /api 然后从配置中重定向它。但我没有,如果节点需要,我不想更改代码。

如何识别请求是否为 post 请求并将其传输到端口 5000?

另外,这个配置文件是用什么语言写的?它看起来像 js 但实际上不是

你最好更改你的代码,但作为一种快速而肮脏的 hack,你可以尝试

server {
    ...
    if ($request_method = POST) {
        rewrite ^ /api$request_uri last;
    }
    location / {
        # your default location config here
    }
    location /api/ {
        proxy_pass http://127.0.0.1:5000/;
    }
}

NGINX config 不是一种编程语言,它使用自己的语法并且是声明式的而不是命令式的,更改 nginx 指令的顺序(ngx_http_rewrite_module 中的指令除外)通常没有什么区别。