反向代理后面的 Docker 容器 - CMS 的重写问题

反向代理后面的 Docker 容器 - CMS 的重写问题

我正在尝试通过 nginx 作为反向代理访问服务器上运行的多个 docker 容器。

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

我用来启动容器的命令:

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

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

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

我可以使用以下配置轻松完成此操作

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,所以现在所有路径都不正确,并且所有资源都无法加载。

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

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

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

答案1

对于想要在沙盒环境中工作的人来说,这是一个常见问题。如果我理解正确,那么您正在寻找系统的错误部分来解决问题。

您需要更改您的 cms 路径。我认为您可以使用环境变量(可能称为 root_path),然后我们可以在初始时将代理值或其他内容传递给容器。

相关内容