2017-11-25 234 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; 
     }