Nginx cors设置不在docker容器中工作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (48)

我正在尝试通过linux服务器上的docker compose部署前端(角度)和后端(.net核心)。我创建了两个存在于相应文件中的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)。但是当我尝试登录时,它向我的api服务发送一个ajax请求,该服务在端口5000上运行,并且我得到了交叉来源错误,因为我的前端正在端口80上运行并尝试访问在端口5000上运行的服务。我想做一些事情,我的所有请求都以api路径开头(在我的情况下是{server_ip} / api / login)应该重定向到api服务。在nginx中有什么有助于重定向请求吗?

我还尝试在default.conf的 location块中添加以下行,但没有成功。

add_header'Access-Control-Allow-Origin''*'; add_header'Access-Control-Allow-Methods''GET,POST,OPTIONS'

;

提问于
用户回答回答于

尝试将以下内容添加到nginx配置中,以便将所有/api/login请求转发到http:// api:5000 /。

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

您还可以使用重写来使nginx调用您的API服务器而不使用/api/login前缀。

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

CORS头文件可能无法正常工作,因为nginx正在返回它们,但您需要使用API​​服务器来返回它们。

扫码关注云+社区

领取腾讯云代金券