Nginx的反向代理使根webapp进入自定义path

我试图在一台机器上设置多个具有相同映像的docker容器,并将所有应用程序托pipe在由path分隔的同一个域中。 目的是将每个客户分离到自己的容器中。 即mydomain.com/bbb …等

我正在使用nginx作为反向代理,并在线上跟随各种示例。 我的nginxconfiguration如下所示:

 server { listen ...; ... location / { proxy_pass http://127.0.0.1:8080; } location /aaa { proxy_pass http://127.0.0.1:8181; } location /bbb { proxy_pass http://127.0.0.1:8282; } ... } 

我注意到,应用程序正在期待被托pipe在根目录/目前在404结束了。有没有一种聪明的方法来重写这些到自己的path基于请求的来源而不修改应用程序本身?

我知道,使用子域名可能更容易,但是我想避免在客户来去时添加和删除子域名。

简单回答是不。

你至less需要考虑三个方面来强迫应用程序远离根源。

  • 将基于根的URL映射到新的位置 – 通过proxy_passrewrite很容易
  • 映射redirect响应(301,302等) – 使用proxy_redirect很容易
  • 映射资源URL和embedded的超链接

最后一点是不容易的。 期望在根中生活的应用程序通常访问其相对于根的资源,这意味着它们在反向代理中碰到了错误的位置。

Apache有一个模块,可以重写HTML文档中embedded的URL,但是这对我来说似乎相当低效。

首选的解决scheme是更改应用程序以使其资源和超链接URL相对path或前缀相同的自定义path。

我正在尝试做相同的设置,所以我遇到了同样的问题。 在我看来,人们实际上不得不像Richard Smith所描述的那样改变后端应用程序。 对nginx使用不同的“外部”端口是一个解决方法,但它不是一个优雅的。