У меня есть сервер 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/
.