Назад | Перейти на главную страницу

nginx proxy_pass игнорируется

У меня есть сервер Nginx, который работает как прокси-сервер.

У меня также есть 3 разных сервера NodeJS Express, работающих на портах 8080, 9090 и 8888 (все работают правильно).

Серверы 8080 и 9090 выполняют одно и то же приложение. Сервер на 8888 в настоящее время должен возвращать «POSTING», когда запрос POST был перенаправлен.

Оба маршрута 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 /flow, нет запроса POST для http://127.0.0.1:8888. Я просто получаю ответ 404 not found.

Если я изменю proxy_pass на перезапись, то получу правильный ответ от сервера 8888.

if ($request_method = POST) {

    rewrite ^ http://127.0.0.1:8888;
}

Мне нужно отправить через параметры POST, поэтому перезапись у меня не работает.

Как заставить работать proxy_pass для сервера 8888?

Спасибо, Амит

Как упоминалось в комментарии:

proxy_pass http://127.0.0.1:8888; в конечном итоге отправит сообщение в http://127.0.0.1:8888/amit4got/flows а не http://127.0.0.1:8888/.