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/
.
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
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/
.
Tags nginx load-balancing proxypass