Nginx, Django, Docker -Составить проблему политики CORS - PullRequest
2 голосов
/ 28 января 2020

Я пытаюсь создать свою первую docker -композицию для проекта в моем университете. У нас есть внешний интерфейс angualt, работающий на сервере naginx. Менеджер для подключения фронт-и бэкэнда и некоторых бэкэндов. Подключение от менеджера к бэкэнду не проблема. Менеджер работает на сервере django, а серверная часть - на flask. Проблема в соединении между сервером nginx и менеджером на django. Каждый раз, когда я пытаюсь выполнить REST-запрос, появляется сообщение об ошибке:

Access to XMLHttpRequest at 'manager:8000/training-data' from origin 'http://localhost:8080' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https#

Я устанавливаю заголовок в nginx .conf и разрешаю cors на сервере django, как вы можете видеть на фрагмент кода ниже:

nginx .conf:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Accept,Content-Type';
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

Django setting.py:

from corsheaders.defaults import default_headers
ALLOWED_HOSTS = ['127.0.0.1','manager','0.0.0.0','localhost']


INSTALLED_APPS = [
.
.
.
.
    'corsheaders',
    'py-backend'
    ]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.BrokenLinkEmailsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware'
]

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

CORS_ALLOW_HEADERS = default_headers + (
    'Access-Control-Allow-Origin',
)

В веб-приложении angualr я защищаю apiUrl = "http://manager", baucaus, который содержит имя службы в docker -композиционном файле.

Я не знаю, может быть, что-то в моих файлах Dockerfiles или docker -compose неверны, поэтому вот они:

docker -compse.yml

version: '3'

services:
    couchdb:
        image: couchdb:2.3.1
        volumes:
            - ./database/data:/home/couchdb/data        
        ports:
            - 5984:5984

    manager:
        build: ./python/py-backend
        volumes: 
            - ./python/py-backend:/usr/src/app
        command: ./dockerScript/wait-for-it.sh couchdb:5984 -t 15 -- python manage.py runserver 0.0.0.0:8000
        restart: on-failure            
        ports:
            - 8000:8000
        depends_on:
            - couchdb 

    spacyserver:
        build: ./python/frameworks/SpacyServer
        volumes:
            - ./python/frameworks/SpacyServer:/usr/src/app
        ports:
            - 5000:5000
        command: python SpacyServer.py
        restart: on-failure
        depends_on:
            - couchdb 
            - manager

    nginxserver:
        build: ./angular
        volumes:
            - ./angular/deep-tex-rex/dist/deep-tex-rex:/usr/share/nginx/html
        ports:
            - 8080:80
        restart: on-failure

nginx / angualr Dockerfile

FROM nginx
COPY ./deep-tex-rex/dist/deep-tex-rex /usr/share/nginx/html
COPY ./deep-tex-rex/src/assets/server-config/nginx.conf /etc/nginx/nginx.conf
WORKDIR /usr/share/nginx/html

manager / Django Dockerfile

FROM python:3.7.6
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt

nginx / angualr needs.txt

django==3.0.2
django-cors-headers==3.2.1
keras==2.3.1
pycouchdb==1.14
pyexcel==0.5.15
pandas==0.25.3
spacy==2.2.3

Я надеюсь, что кто-то может помочь мне, я сейчас очень расстроен. Я потратил сейчас так много часов, но не могу решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...