我正在尝试通过 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),然后我们可以在初始时将代理值或其他内容传递给容器。