Nginx выдает 502 Bad Gateway при проксировании в приложение nodejs, работающее в другом контейнере докера

Я использую docker compose для создания 2-х контейнеров: один для приложения, работающего на Nginx, а другой - для серверного приложения на Nodejs (работает на другом порту 4000) с маршрутами шаблонов «/org-metadata/, /proxy-api/, /node-api./ ** ».

Я пытаюсь проксировать nginx на nodejs, работающие на 4000, но он не достигает серверной части. и nginx выдает ответ 502 Bad Gateway.

P.S: мое приложение node дает выдает 503 ошибку, когда я запускаю ее из браузера.

Вот мой файл nginx.conf:
worker_processes auto;

events {
    worker_connections 8000;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /dev/stdout;
    error_log /dev/stderr;

    upstream backend {
        server 127.0.0.1:4000;
    }

    server {
        listen 80;

        root /var/www;
        index index.html index.htm;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location ~ (proxy-api|node-api|\/api\/) {
            proxy_pass http://backend;
            proxy_redirect off;
            add_header X-Frame-Options "SAMEORIGIN" always;
            add_header X-XSS-Protection "1; mode=block" always;
            add_header X-Content-Type-Options "nosniff" always;
            add_header Referrer-Policy "no-referrer-when-downgrade" always;
            add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
        }
    }
}


docker-compose.yml
version: "3"

services:
    nodejs:
        build:
            context: "./server"
        ports:
            - "4000:4000"
        image: nodejs
        container_name: nodejs
        restart: unless-stopped
    webserver:
        build: "."
        ports:
            - "80:80"
        image: webserver
        container_name: webserver
        restart: unless-stopped
        depends_on:
            - nodejs

Dockerfile для nodejs:
FROM node:11-alpine
WORKDIR /app
COPY . .
RUN npm ci
EXPOSE 4000
CMD [ "npm", "run", "start" ]

Dockerfile для nginx:
FROM nginx:1.15.2-alpine
COPY ./build /var/www
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
ENTRYPOINT ["nginx","-g","daemon off;"]
1 симпатия

Хороший вопрос. Позже попробую вернуться с ответом.

Я пробовал протестировать вашу настройку, проблема с моей стороны была решена путем корректировки этой части конфигурации Nginx:
upstream backend {
server 127.0.0.1:4000;
}
На:
upstream backend {
server your.droplet.ip.address:4000;
}
Тогда Nginx сможет взаимодействовать с контейнером узла через порт 4000.

Еще одна вещь, которую вы, возможно, захотите добавить, поскольку, если вы используете блок восходящего потока, может быть целесообразно явно установить заголовок Host:
proxy_set_header Host site.ru;
Надеюсь, это поможет!