我试图通过一个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,然后我们可以在初始时将代理值或其他东西传递给容器。