【问题标题】:apache2 : redirect to an IP address (container's address) accoring to the urlapache2:根据 url 重定向到 IP 地址(容器地址)
【发布时间】:2018-04-05 01:40:08
【问题描述】:

上下文:

我有一个带有 apache2 的 Debian。我可以通过以下 ip 访问这个 Debian:192.168.12.28。

在这个 Debian 上,我有两个具有以下 ips 的容器:

-172.18.0.2

-172.19.0.2

有问题的:

我想从外部访问我的 container1,例如: 192.168.12.28/container1 要么 myDomain/container1

我尝试了什么:

两个域: test1.domain.fr 与以下 test1.domain.fr.conf :

<VirtualHost *:80>
  ServerName test1.domain.fr

  ProxyPass / http://172.18.0.2:8080/
  ProxyPassReverse / http://172.18.0.2:8080/
  ProxyRequests Off
</VirtualHost>

test2.domain.fr 带有以下 test2.domain.fr.conf :

<VirtualHost *:80>
  ServerName test2.domain.fr

  ProxyPass / http://172.19.0.2:8080/
  ProxyPassReverse / http://172.19.0.2:8080/
  ProxyRequests Off
</VirtualHost>

我已启用域:

a2ensite test1.domain.fr
a2ensite test2.domain.fr

我有什么:

当我想访问 192.168.12.28 时: Apache 的页面“它有效!”

当我想访问 192.168.12.28/test1.domain.fr 或 192.168.12.28/test2.domain.fr 时: 在此服务器上找不到请求的 URL /test1(or 2).domain.fr。

当我想访问 test1.domain.fr 或 test2.domain.fr 时: 找不到 test1(or 2).domain.fr

感谢您的帮助和 对不起我的英语不好! :-)

编辑:我目前正在搜索,但暂时无法使用!

编辑:我的 container1 的配置类似于:“8081:8080”和“444:443”,而我的 container2 的配置类似于:“8080:8080”和“443:443”

在这里编辑我的 docker-compose 文件:

第一个容器:

version: '2'

services:
  php:
    build: php
    ports:
    - "8080:8080"
    - "443:443"
    volumes:
    - ./php/www:/var/www/html

第二个容器:

version: '2'

services:
  php:
    build: php
    ports:
    - "8081:8080"
    - "444:443"
    volumes:
    - ./php/www:/var/www/html

【问题讨论】:

  • 在您的 Debian 机器上是否可以使用这些站点?例如:curl 127.0.0.1/test1.domain.fr
  • 不是他们不是,我和外面的反应一样

标签: apache redirect docker mod-rewrite virtualhost


【解决方案1】:

如果它是单个 Docker 主机(例如不在 Swarm 模式下),您不能将两个容器映射到同一个主机端口...试试这个:

docker run <...> -p 3000:80 <...>   # e.g. for test1
docker run <...> -p 5000:80 <...>   # e.g. for test2

并相应地调整ProxyPassProxyPassReverse,例如:

ProxyPass / http://172.18.0.2:3000/     # e.g. for test1
ProxyPass / http://172.19.0.2:5000/     # e.g. for test2

参考(带有 nginx 作为 apache 代理的完整示例): https://www.digitalocean.com/community/questions/how-to-bind-multiple-domains-ports-80-and-443-to-docker-contained-applications

【讨论】:

  • 我没有将我的容器映射到同一个端口,一个映射到 8080 和 443,另一个映射到 8081 和 444。
  • 然后你需要将你的ProxyPass 调整为 docker host(!) 端口:8080 和 8081(它们在你给定的配置中仍然相同)。
  • 不,它们不是,一个proxyPass是172.18.0.2:8080(container1的地址),另一个是172.19.0.2:8080(container2的地址)。相同的端口但不同的地址,对吧?
  • 是的……我明白了……但是端口是一样的。
猜你喜欢
  • 2019-08-27
  • 2015-03-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2018-11-01
  • 2020-04-07
  • 2012-03-31
相关资源
最近更新 更多