2017-11-25 235 views
0

我有一个docker撰写文件,包含两个微服务,我想利用URI路由来处理CORS。这里是我撰写的文件:NGINX + Docker Compose路由问题

version: "3.1" 
services: 
    auth-api: 
    image: xxxx/auth-api:latest 
    restart: always 
    depends_on: 
     - "user-api" 
    user-api: 
    image: xxxx/user-api:latest 
    restart: always 
nginx: 
    image: nginx 
    restart: always 
    ports: 
     - "80:80" 
    links: 
     - "auth-api" 
     - "user-api" 
    volumes: 
     - ./nginx:/etc/nginx 

我想用NGINX的路由,但我遇到了问题,用404的或者405试图访问该资源时的。我尝试了几种不同的配置,有一段时间NGINX说它在开始时找不到api端点,我认为我的问题主要是围绕路由配置。对于这些请求,我希望它是/auth/user

worker_processes 1; 

events { worker_connections 1024; } 

http { 

    sendfile on; 

    upstream auth-target { 
     server auth-api:8080; 
    } 

    upstream user-target { 
     server user-api:8080; 
    } 

    server { 
     listen  80; 

     location /auth { 

      proxy_pass http://auth-target; 

      proxy_redirect  off; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Host $server_name; 
     } 

     location /user { 

      proxy_pass http://user-target; 

      proxy_redirect  off; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Host $server_name; 
     } 


    } 

} 

我对NGINX很新,所以我不确定自己做的是对的。我还应该注意到,这两个API都有8080作为容器构建的一部分公开。

回答

0

所以这是我的问题。路由工作正常,但我从我的服务中返回404。这是因为位置路由与请求一起传递。所以,最后我发现了这样的回答:

https://serverfault.com/questions/562756/how-to-remove-the-path-with-an-nginx-proxy-pass

它指向你需要一个尾随斜线,以去除的位置,所以我的配置文件最终看上去是这样的:

location /auth/ { 

      proxy_pass http://auth-target/; 

      proxy_redirect  off; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Host $server_name; 
     }