Настройка Nginx Cors не работает в Docker-контейнере - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь развернуть внешний интерфейс (угловой) и внутренний (ядро .net) через docker compose на linux-сервере.Я создал два файла Docker, присутствующих в соответствующем файле.Вот мой docker.compos.yml файл.

version: '3.4 
  volumes: 
   data:

services:
  api:
    build:
      context: .
      dockerfile: Backend/Dockerfile
    ports:
      - "5000:80"
    depends_on:
      - db
  web:
    build:
      context: .
      dockerfile: Frontend/Dockerfile
    ports:
     - "80:80"
    depends_on:
      - api
  db:
    image: postgres:latest
    volumes: 
     - data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "docker_Password"
      POSTGRES_DB: "database_name"
    ports:
      - "5432:5432"

Я использую образ nginx для обслуживания внешней сборки.Вот файл default.conf с основными настройками.

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
}

При указанной выше конфигурации я запустил docker-compose up --build и смогчтобы увидеть мою страницу входа (так как порт 80 открыт, поэтому мой URL-адрес - мой ip сервера).Но когда я пытаюсь войти в систему, он отправляет запрос ajax моей службе API, которая работает на порту 5000, и я получаю ошибку перекрестного источника в качестве моего внешнего интерфейса, который работает на порту 80 и пытается получить доступ к службе, которая работает на порту 5000.Я хотел сделать что-то, чтобы все мои запросы, начиная с пути API (здесь, в моем случае это {server_ip} / api / login ), должны были перенаправляться в службу API.Есть ли в nginx что-нибудь полезное для перенаправления запроса?

Я также пытался добавить следующие строки в блоке местоположения default.conf , но безуспешно.

add_header 'Access-Control-Allow-Origin''*';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'

;

1 Ответ

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

Попробуйте добавить следующее в конфигурацию nginx, чтобы она перенаправляла все /api/login запросы на http://api:5000/.

location /api/login {
  proxy_pass http://api:5000;
}

. Вы также можете использовать rewrite , чтобы nginx вызывал ваш API-сервер безпрефикс /api/login.

location /api/login {
  rewrite ^/api/login/(.*) /$1 break;
  proxy_pass http://api:5000;
}

Заголовки CORS, вероятно, не работали, потому что nginx возвращал их, но для их возврата требовался сервер API.

...