nginx proxy_pass 被忽略

nginx proxy_pass 被忽略

我有一个作为代理服务器工作的 Nginx 服务器。

我还在端口 8080、9090 和 8888 上运行 3 个不同的 NodeJS Express 服务器(全部正常运行)。

服务器 8080 和 9090 执行相同的 APP。当 POST 请求被转发时,8888 上的服务器当前应该返回“POSTING”。

GET 和 POST 路由均针对服务器 8888 正确设置,如果我使用 CURL 请求直接调用它们,我会得到正确的响应:

import Express from 'express';
import BodyParser from 'body-parser';

// Initialise server
const server = Express();

// for parsing application/json
server.use(BodyParser.json());

// Setting port
server.set('port', 8888);

server.post('/', function(request, response) {

    console.log('POSTING');
    response.send('POSTING');
});

server.get('/', function(request, response) {

    console.log('GETTING');
    response.send('GETTING');
});

console.log(`Starting server on port ${server.get('port')}`)
server.listen(server.get('port'));

我的 Nginx 配置如下:

upstream amit4got {

    server 127.0.0.1:8080;
    server 127.0.0.1:9090;
}

server {

    listen       7070;
    server_name  127.0.0.1;

    access_log  /usr/local/etc/nginx/logs/default.access.log;
    error_log  /usr/local/etc/nginx/logs/default.error.log;


    location /amit4got/ {

        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;

        proxy_pass              http://amit4got;
        proxy_read_timeout      90;
    }


    location /amit4got/flows {

        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;

        proxy_read_timeout      90;

        if ($request_method = POST) {

            proxy_pass          http://127.0.0.1:8888;
        }

        if ($request_method = GET) {

            proxy_pass          http://amit4got;
        }

     }
}

Nginx 在端口 7070 上提供服务,对于端点 /amit4got,从 8080 或 9090 加载内容。

问题是,当我尝试 POST 到 /amit4got/flows 时,没有 POST 请求http://127.0.0.1:8888。我刚刚收到 404 未找到的响应。

如果我将 proxy_pass 更改为重写,那么我会从 8888 服务器得到正确的响应。

if ($request_method = POST) {

    rewrite ^ http://127.0.0.1:8888;
}

我需要通过 POST 参数发送,因此重写对我来说不起作用。

我怎样才能使 proxy_pass 到服务器 8888 工作?

谢谢,阿米特

答案1

正如评论中提到的:

proxy_pass http://127.0.0.1:8888;最终会发布到 http://127.0.0.1:8888/amit4got/flows而不是http://127.0.0.1:8888/

相关内容