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 run 和 docker-compose 配置挂载 Volume 并运行 nginx
docker-compose 简单搭建nginx的ssl环境