NGINX + Docker Compose 路由问题

Posted

技术标签:

【中文标题】NGINX + Docker Compose 路由问题【英文标题】:NGINX + Docker Compose Routing Issues 【发布时间】:2018-05-09 05:49:57 【问题描述】:

我有一个 docker compose 文件,其中包含两个微服务,我想利用 URI 路由来处理 CORS。这是我的撰写文件:

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 作为容器构建的一部分公开。

【问题讨论】:

【参考方案1】:

所以这是我的问题。路由工作正常,但我从我的服务返回 404。这是因为 Location 路由与请求一起传递。所以最后我找到了这个答案:

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;
        

【讨论】:

以上是关于NGINX + Docker Compose 路由问题的主要内容,如果未能解决你的问题,请参考以下文章

通过docker host对nginx映射路由,为每个路由调用不同的容器

docker-compose快速启动nginx

docker run 和 docker-compose 配置挂载 Volume 并运行 nginx

docker-compose 简单搭建nginx的ssl环境

docker-compose 简单搭建nginx的ssl环境

Docker+Docker-compose部署项目+Nginx配置域名、证书