nginx proxy_pass está sendo ignorado

2

Eu tenho um servidor Nginx que funciona como um servidor proxy.

Eu também tenho 3 servidores NodeJS Express diferentes em execução nas portas 8080, 9090 e 8888 (todos funcionando corretamente).

Os servidores 8080 e 9090 executam o mesmo aplicativo. O servidor no 8888 atualmente deve retornar 'POSTING' quando a solicitação POST for encaminhada.

As rotas GET e POST estão configuradas corretamente para o servidor 8888 e recebo uma resposta correta se as chamo diretamente com solicitações 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'));

Minha configuração do Nginx é a seguinte:

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;
        }

     }
}

O Nginx é veiculado na porta 7070 e, para o terminal / amit4got, carrega o conteúdo de 8080 ou 9090.

O problema é que, quando tento fazer o POST para / amit4got / flows, não há solicitação POST para o link . Acabei de receber uma resposta de 404 não encontrada.

Se eu alterar o proxy_pass para uma reescrita, obtenho uma resposta correta do servidor 8888.

if ($request_method = POST) {

    rewrite ^ http://127.0.0.1:8888;
}

Eu preciso enviar através dos parâmetros do POST, então a reescrita não funciona para mim.

Como posso fazer o proxy_pass para o servidor 8888 funcionar?

Obrigado Amit

    
por Amit4got 28.03.2016 / 15:42

1 resposta

0

Como mencionado no comentário:

proxy_pass http://127.0.0.1:8888; terminará postando em http://127.0.0.1:8888/amit4got/flows e não em http://127.0.0.1:8888/ .

    
por 30.03.2016 / 11:21