Nginx、Django、Docker-Compose CORS 策略问题

Pac*_*212 5 python django nginx docker-compose angular

我正在尝试为我大学的一个项目构建我的第一个 docker-compose。我们有一个运行在 naginx 服务器上的 angult 前端。连接前端和后端以及一些后端内容的管理器。从管理器到后端的连接没有问题。管理器运行在 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#
Run Code Online (Sandbox Code Playgroud)

我在 nginx.conf 中设置了标头,并在 django 服务器中允许 cors,如下面的代码片段所示:

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;
}
Run Code Online (Sandbox Code Playgroud)

Django设置.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',
)
Run Code Online (Sandbox Code Playgroud)

在 angualr 网络应用程序中,我定义了 apiUrl = " http://manager ",baucaus 是 docker-compose 文件中的服务名称。

我不知道我的 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

经理/Django Dockerfile

FROM python:3.7.6
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

nginx/angualr 要求.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
Run Code Online (Sandbox Code Playgroud)

我希望有人能帮助我我现在真的很沮丧。我现在花了这么多小时,但我无法解决这个问题。