Nginx для Angular, не попадающего в интерфейс API - PullRequest
0 голосов
/ 01 февраля 2019

Я использую nginx для обратного URL-адреса прокси, идущего на внутренний сервер.

Вот мой файл угловой настройки :

FROM node as node

# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/package.json
RUN npm install
COPY . /usr/src/app
ARG env=prod
RUN npm run build -- --prod

FROM nginx
COPY --from=node /usr/src/app/dist/ /usr/share/nginx/html
COPY nginx-custom.conf /etc/nginx/conf.d/default.conf

МойКонфигурация nginx

server {
  listen 80;
  server_name  localhost;
  root /usr/share/nginx/html/sampleangularapp;

   location / {
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }

  location /api/products {
    proxy_pass http://backend:80;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
  }


}

Docker Compose:

version: '3'
services:
  backend:
    image: backend:v2
    container_name: backend
    build:
      context: BackEndAPIs
    ports:
      - 9000:80
  frontend:
    image: frontend:v2
    container_name: frontend
    build:
      context: sampleangularapp
    ports:
      - 4200:80
    depends_on: 
      - backend

Когда я нажимаю кнопку, которая вызывает API / продукты через код:

   return this.http.get<string[]>('api/products');

Вот что я получаю:

enter image description here

Я дважды проверил API и работает нормально:

enter image description here

1 Ответ

0 голосов
/ 01 февраля 2019

Root Cause : внутренний URL-адрес "http://localhost:8080" не будет работать внутри углового контейнера приложения, поскольку он разрешается в ip контейнера.

Вам необходимо убедиться, что вы используете докерсеть, чтобы связать два контейнера с одной и той же сетью и подключиться, используя имя службы или контейнер контейнера внутреннего приложения ip.

, в этом случае вы можете использовать docker-compose.

Пример здесь:

version: '3'
services:
  backend:
    image: backend
    ports:
      - "9000:9000"
  frontend:
    image: frontend
    ports:
      - "4200:80"
    depends_on:
      - backend

Я также ответил на аналогичный вопрос здесь: Внутренняя проблема Nginx

Справочник GitHub

...