Nginx代理传递配置docker

nmd*_*nmd 6 nginx proxypass docker

这是问题所在:

主机具有在不同端口上运行的多个docker应用程序,例如.App1 @ 3001,App2 @ 3002 ... 3100等

现在我想访问该格式的应用http://hostname.com/app1,http://hostname.com/app2 ..

为此,我在主机上运行nginx,以根据子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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当网站的子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.
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?或者唯一的方法是将dns设置为app1.hostname.com并进行基于名称的路由?

iTe*_*ech 1

您可以让每个应用程序侦听单独的端口(例如 3000 和 3001),然后按如下方式配置 nginx(将其包含在server {}定义块中):

 location /app1 {
  proxy_pass        http://localhost:3000;
  proxy_set_header  X-Real-IP  $remote_addr;
 }

 location /app2 {
  proxy_pass        http://localhost:3001;
  proxy_set_header  X-Real-IP  $remote_addr;
 }
Run Code Online (Sandbox Code Playgroud)