CORS заблокирован в докеризованном проекте Django REST + Angular - PullRequest
0 голосов
/ 21 ноября 2018

Сегодня я решил докернизировать существующее приложение Django REST + Angular.Веб-сайт отображается так, как и должен, однако запросы CORS блокируются.

Доступ к XMLHttpRequest по адресу http://localhost:8000/branches/1' from origin 'http://localhost:3000' заблокирован политикой CORS: На запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Угловое приложение докеризуется с помощью Nginx.В процессе работы я использовал этот учебник (файлы docker + compose перечислены ниже).

Странно то, что у меня была эта проблема раньше, и я решил ее с помощью пакет djang-cors-headers .Вместе с CORS_ORIGIN_ALLOW_ALL = True это, похоже, больше не решает проблему.

Может ли это быть связано с тем, что приложение теперь выполняется в контейнерах?Я предоставляю dockerfiles для проектов вместе с файлом docker-compose ниже.Не уверен, что они актуальны.

Dockerfile для проекта Angular:

FROM tiangolo/node-frontend:10 as build-stage
WORKDIR /app

COPY package*.json /app/
RUN npm install

COPY ./ /app/
ARG configuration=production
RUN npm run build -- --output-path=./dist/out --configuration $configuration

# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
FROM nginx:1.15
COPY --from=build-stage /app/dist/out/ /usr/share/nginx/html

# Copy the default nginx.conf provided by tiangolo/node-frontend
COPY --from=build-stage /nginx.conf /etc/nginx/conf.d/default.confenter

Dockerfile для проекта REST Django:

# Pull base image
FROM python:3.7

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# create root directory
RUN mkdir /web

# set working directory
WORKDIR /web

# Coppy current directory contents into the container
ADD . /web/

# Install any needed packages in requirements.txt
RUN pip install -r requirements.txt

И docker-composeФайл .yml:

version: '3'

services:
  db:
    image: mysql:5.7
    restart: always
    container_name: db
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306  # cannot change this port to other number
      - MYSQL_ROOT_HOST=%
      - MYSQL_DATABASE=test
      - MYSQL_USER=belter
      - MYSQL_PASSWORD=belter_2017
      - MYSQL_ROOT_PASSWORD=123456_abc
    ports:
      - '3302:3306'

  web:
    build: ./orca/
    restart: always
    command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
    container_name: web
    volumes:
      - ./orca:/code
    ports:
      - '8000:8000'
    depends_on:
      - db

  angular:
    build: ./ng-orca-new/
    container_name: angular
    ports:
      - '3000:80'

Заранее спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Проблема связана с тем, что nginx блокирует запросы.На этом уровне еще раз добавлены заголовки, в результате чего получился следующий файл nginx.conf:

server {
  listen 80;
  location / 
    add_header "Access-Control-Allow-Origin" "*";
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
    add_header 'Access-Control-Allow-Headers' 'X-Requested-With,Accept,Content-Type, Origin';

    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...