apache2:根据 url 重定向到 IP 地址(容器地址)
Posted
技术标签:
【中文标题】apache2:根据 url 重定向到 IP 地址(容器地址)【英文标题】:apache2 : redirect to an IP address (container's address) accoring to the url 【发布时间】: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
不是他们不是,我和外面的反应一样
【参考方案1】:
如果它是单个 Docker 主机(例如不在 Swarm 模式下),您不能将两个容器映射到同一个主机端口...试试这个:
docker run <...> -p 3000:80 <...> # e.g. for test1
docker run <...> -p 5000:80 <...> # e.g. for test2
并相应地调整ProxyPass
和ProxyPassReverse
,例如:
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的地址)。相同的端口但不同的地址,对吧?
是的……我明白了……但是端口是一样的。以上是关于apache2:根据 url 重定向到 IP 地址(容器地址)的主要内容,如果未能解决你的问题,请参考以下文章