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

并相应地调整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的地址)。相同的端口但不同的地址,对吧? 是的……我明白了……但是端口是一样的。

以上是关于apache2:根据 url 重定向到 IP 地址(容器地址)的主要内容,如果未能解决你的问题,请参考以下文章

Nginx的location匹配规则-根据url 路径重定向到不同的IP

根据 IP 地址重定向访问者

根据访问者 IP 地址(国家/地区)将主网站重定向到子域

如何根据国家IP地址重定向域

根据用户的位置将用户重定向到最近的服务器而不更改 url

如何根据国家/地区的IP地址重定向网站