【发布时间】:2014-12-05 23:05:34
【问题描述】:
问题来了:
主机有多个 docker 应用程序在不同的端口上运行,例如。 App1 @ 3001,App2 @ 3002...3100 等
现在我想以http://hostname.com/app1、http://hostname.com/app2..这种格式访问应用程序。
为此,我在主机上运行 nginx,以根据 sub-uri 将请求代理到正确的端口
location = /app1 {
proxy_redirect http://hostname:3001/;
include /etc/nginx/proxy_params;
}
location ^~ /app1 {
proxy_redirect http://hostname:3001/app1;
include /etc/nginx/proxy_params;
}
但是当站点的子 uri 更改或站点重定向时,这不起作用。 例如:
If I visit the site at hostname:3001 -> I can see the site
If I visit the site at http://hostname.com/app1 -> I can see the site
If the site page is at hostname:3001/static/index.html then when i access it as http://hostname.com/app1 the page changes to http://hostname.com/static/index.html -> I get 404.
有没有办法做到这一点?还是唯一的方法是将 dns 设置为 app1.hostname.com 并进行基于名称的路由?
【问题讨论】:
-
您的问题与 Docker 或 Nginx 无关。这是使用更改的应用程序路径进行反向代理的更普遍的问题:您的应用程序期望它在
/提供服务,而反向代理在/app1提供服务。我相信您可以轻松找到问题描述和解决方法。 -
是的,我早就问过了。我通过为运行容器的主机创建 dns 记录并将容器端口映射到主机端口来解决此问题,然后将一个简单的配置添加到 nginx 映射 app1.abc.com 到代理通道中的主机:端口。它运行良好且易于扩展。