反向代理背后的Docker容器 – 重写CMS的问题

我试图通过一个nginx作为反向代理访问服务器上运行的多个docker集装箱。

每个容器都是独立的CMS。 有些是wordpress,有些是drupal等等。

我用以下命令启动容器:

docker run -p 0.0.0.0:{$port}:80 -i -t loader-docker 

这里最大的区别是我想通过一个path而不是一个子域访问每个容器。

例如: http : //example.com/docker-1 http://example.com/docker-2

我可以用下面的configuration很容易地做到这一点

 server { listen 80; server_name example.com; location / {} location /docker-1/ { 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-Proto $scheme; proxy_pass docker.server:8001; } location /docker-2/ { 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-Proto $scheme; proxy_pass docker.server:8002; } } 

当我去http://example.com/docker-1我正在打内部服务器端口8001上运行的docker容器。 同样,当我去http://example.com/docker-2

问题是每个容器都运行CMS的path现在都不正确,所有的资源加载失败。

CMS正在寻找的path实际上是docker.server(内部服务器),但它得到http://example.com/

是否有可能在nginx中解决这个问题,还是必须为每个容器编写自定义的.htaccess规则? 如果是这样,我会怎么做呢?

我应该注意到,每个容器都运行Apache作为其Web服务器。

谁想要在沙盒上工作,这是常见的问题。 如果我正确地得到了你的问题,你正在寻找解决scheme的错误部分的系统。

你需要改变你的cmspath。 我想你可以使用可能被称为root_path的环境variables,然后我们可以在初始时将代理值或其他东西传递给容器。