nginx映射路由由docker主机,为每个路由,调用一个不同的容器

我试图通过docker主机映射路由,为每个路由,调用一个不同的容器。

我有一个docker-2个服务组成,那个服务在:5000端口。 我的nginx.conf映射如下代码:

location /template-api { rewrite ^/template-api/?(.*) /$1 break; proxy_pass http://template-api:5000; 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 /api-plan { rewrite ^/api-plan/?(.*) /$1 break; proxy_pass http://api-plan:5000; 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; } 

何时,我调用localhost:8000 / api-template / documentation,调用静态文件的路由或返回静态文件的路由。 他在localhost:8000 / swaggerui返回错误,没有find文件。 该错误发生的原因是swagger ui文件夹在localhost:8000 / api-template / swaggerui和localhost:8000 / api-plan / swaggerui

为了解决这个错误,我join了ngix,conf / map:

 server { listen 8000; access_log /var/log/nginx/api.log; error_log /var/log/nginx/api_error.log; server_name localhost; location / { proxy_pass http://api-plan:5000; 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; } 

现在,当我调用localhost:8000 / api-plan / documentation时,结果成功,但是当我调用localhost:8000 / template-api / documentation时,APIredirect到localhost:8000 / api-plan /导致错误的路由。

尝试这个:

 server { listen 8000; access_log /var/log/nginx/api.log; error_log /var/log/nginx/api_error.log; server_name localhost; location / { proxy_pass http://$server_name:8080/swaggerUi; 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 /template-api { rewrite ^/template-api/?(.*) /$1 break; proxy_pass http://template-api:5000; 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 /api-plan { rewrite ^/api-plan/?(.*) /$1 break; proxy_pass http://api-plan:5000; 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; } } 

您可以使用cookie来检测哪个后端应该收到/swaggerui请求。 这是非常不安全的,因为用户可以编辑cookie并尝试访问其他主机,但由于它是一个本地testing环境,它只是工作。

 server { listen 8000; access_log /var/log/nginx/api.log; error_log /var/log/nginx/api_error.log; server_name localhost; location ~ ^/swaggerui { resolver 127.0.0.11 ipv6=off; proxy_pass http://$cookie_origin:5000; 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 /template-api { rewrite ^/template-api/?(.*) /$1 break; proxy_pass http://template-api:5000; 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; add_header Set-Cookie "origin=template-api;Domain=localhost;Path=/;Max-Age=100000"; } location /api-plan { rewrite ^/api-plan/?(.*) /$1 break; proxy_pass http://api-plan:5000; 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; add_header Set-Cookie "origin=plan-api;Domain=localhost;Path=/;Max-Age=100000"; } }