Docker nginx反向代理到一组停靠的应用程序

Docker nginx反向代理到一组停靠的应用程序,docker,nginx,reverse-proxy,Docker,Nginx,Reverse Proxy,我有一个linux服务器,在同一台机器上运行的docker容器中运行许多应用程序,每个应用程序都暴露在自己的端口上。 我希望能够通过安装nginx代理 http://myserver.example.com/firstapp/... http://myserver.example.com/secondapp/... http://myserver.example.com/thirdapp/... etc. 我已经设置了nginxproxy.conf(见下文),这样当它得到一个urlhttp:/

我有一个linux服务器,在同一台机器上运行的docker容器中运行许多应用程序,每个应用程序都暴露在自己的端口上。 我希望能够通过安装nginx代理

http://myserver.example.com/firstapp/...
http://myserver.example.com/secondapp/...
http://myserver.example.com/thirdapp/...
etc.
我已经设置了nginx
proxy.conf
(见下文),这样当它得到一个url
http://myserver.example.com/firstapp/
将其重写为
http://://

问题是,第一个URL返回的HTML当然包含指向不包含前缀
/firstapp/
的文件的链接,因此我得到例如:

http://myserver.example.com/css/myfile.css 404 Not Found
解决方案 仅当我有一个应用程序(“stormui”)时有效,但当我有多个停靠的应用程序在同一台服务器上运行时不适用

我使用docker-compose.yml文件启动一切,如下所示

version: '3.2'

services:

  proxy:
    image: nginx:latest
    container_name: proxy
    depends_on:
      - firstapp
      - secondapp
      - ...
    volumes:
      - type: bind
        source: ./proxy.conf
        target: /etc/nginx/nginx.conf
    ports:
      - 80:80
    restart: always


  firstapp:
    image: srv_firstapp:
    expose:
      - "8000"
    .
    .
    -

  secondapp:
    image: srv_firstapp:
    expose:
      - "8001"
    .
    .
    .
试图写入nginx的proxy.conf文件的Mi包含以下内容:

    .
    .
    .
    server {

     listen 80;
     server_name myserver.example.com;

     location /firstapp {
       proxy_pass http://firstapp:8000;
       rewrite ^/firstapp(.*)/firstapp$ $1 break;
     }

     location /secondapp {
       .
       .
       .
     }
    }
    .
    .
    .

是否只有通过配置nginx反向代理才能解决此问题?(也就是说,不必更改我无法访问的各种停靠应用程序的代码或配置)?

有趣的问题。您最好在.conf文件中使用
$http\u referer
,并尝试在此基础上创建必要的条件。您能提供一些其他详细信息吗?请考虑到我不是nginx配置方面的专家(我使用的.conf文件只是从一个示例中复制的)。感谢您,我认为通过使用
$http\u referer
您可以应用一些条件,但我认为您无法实现我的想法。我将尝试返回一个详细的解决方案。我在本文中找到了部分答案:它使用sub_filter指令解决问题。引用文章“这可能需要几天的反复试验。你肯定需要浏览器的开发者工具视图。你将非常熟悉应用程序的内部结构…”。事实上,我设法重写了html中生成的一些链接,但并非所有内容都能正常工作(即,未找到css和图像文件)。还得努力。