Ошибка Nginx (111: соединение отказано) при подключении к восходящему каналу, docker -compose nodejs - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь создать несколько сервисов и реверсировать их через прокси с помощью nginx.

Итак, service1:

http://api/service1 (nginx) => docker (http://service1: 4001 / ) => express (http://localhost: 4000 )

service2 это:

http://api/service2 (nginx) => docker (http://service2: 4002 / ) => express ( http://localhost: 4000 )

Я впервые экспериментирую с nginx с нуля, и я застрял, я не могу связаться ни с одним из моих сервисов с http://localhost: 80 / service1 или http://api/service1. И как вы думаете, это хорошее начало архитектуры для микро-сервисов для разработчиков и производства?

У меня также есть сомнения относительно моей внутренней сети для моего docker compose, точно ли она установлена ​​или разрешена сеть по умолчанию docker?

(Все контейнеры работают нормально );

docker -compose.yml:

version: '3'

services:
  mongo:
    container_name: mongo
    image: mongo:latest
    ports:
      - '27017:27017'
    volumes:
      - './mongo/db:/data/db'

  nginx:
    build: ./nginx
    container_name: nginx
    links:
      - service1
      - service2
    ports:
      - '80:80'
      - '443:443'
    depends_on:
      - mongo
    networks:
      - api

  service1:
    build: ./services/service1
    container_name: service1
    links:
      - 'mongo:mongo'
    volumes:
      - './services/service1:/src/'
    ports:
      - '4001:4000'
    command: yarn dev
    networks:
      - api

  service2:
    build: ./services/service2
    container_name: service2
    links:
      - 'mongo:mongo'
    volumes:
      - './services/service2:/src/'
    ports:
      - '4002:4000'
    command: yarn dev
    networks:
      - api

networks:
  api:

nginx .conf:

worker_processes 1  ;


events {
  worker_connections  1024;
}

http {

    server {
        listen       80;
        server_name api;
        charset utf-8;

    location /service1 {
        proxy_pass http://service1:4001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /service2 {
        proxy_pass http://service2:4002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    }
}

служба DockerFile:

FROM node:latest

RUN mkdir /src
WORKDIR /src

COPY package.json /src/package.json
RUN npm install

COPY . /src/
EXPOSE 4000

nginx DockerFile:

FROM nginx

COPY nginx.conf /etc/nginx/nginx.conf

Я пытаюсь дозвониться до http://localhost: 80 / service1 / , который обычно приводит меня к http://service1: 4001

но я получаю эту ошибку:

[ошибка] 7 # 7: * 2 connect () не удалось (111: соединение отклонено) при подключении к восходящему каналу , клиент: 172.23.0.1, сервер:

172.23.0.1 - - [15 / Apr / 2020: 22: 01: 44 +0000] "GET / HTTP / 1.1" 502 157 "-" "PostmanRuntime / 7.24.1 "bts-api, запрос:" GET / HTTP / 1.1 ", восходящий поток:" http://172.23.0.2: 4001 /", хост:" localhost: 80 "

Я также пытаюсь достичь http://api/service1/ (определено в nginx .conf как имя_сервера), но у меня нет ответа или пин-кода г.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Наконец, из-за моего имени контейнера было $ (project) - $ (container-name), поэтому в nginx я заменил account => $ (project) -accounts

0 голосов
/ 16 апреля 2020

Пожалуйста, добавьте параметр proxy_redirect и порт доступа к контейнеру в файлы nginx .conf, как показано ниже.

server {
    listen       80;
    server_name api;
    charset utf-8;

location /service1 {
    proxy_pass http://service1:4000;
    proxy_redirect      http://service1:4000: http://www.api/service1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /service2 {
    proxy_pass http://service2:4000;
    proxy_redirect      http://service2:4000: http://www.api/service2;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
...