一个和同一码头容器上的多个Vhost



我正在尝试在一个和同一docker容器和端口上运行两个不同的域。

Docker容器运行CentOS。docker-compose.yml看起来像:

web:
  image: fab/centos
  ports:
    - "80:80"
  volumes:
    - ./src/httpd.conf:/etc/httpd/conf/httpd.conf
    - ./src:/var/www/html
    - ./src/hosts:/etc/hosts
  environment:
   - VIRTUAL_HOST=dummy.dev,tests.dev

我还声明了主机计算机上/etc/hosts内部的两个.DEV域名

自配置虚拟主机以来已经有一段时间了。我的理解是,我只需要声明它们,而Apache会根据请求的HTTP主机自动提供适当的文件。

这是我所拥有的,在httpd.conf的末尾添加了:

<VirtualHost *:80> # first host = default host
    DocumentRoot /var/www/html/default
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/dummy
    ServerName dummy.dev
    ServerAdmin webmaster@dummy.dev
    ErrorLog logs/dummy.dev-error_log
    CustomLog logs/dummy.dev-access_log common
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/tests
    ServerName tests.dev
    ServerAdmin webmaster@tests.dev
    ErrorLog logs/tests.dev-error_log
    CustomLog logs/tests.dev-access_log common
</VirtualHost>

但是,实际上,访问dummy.dev或tests.dev实际上服务于/var/www/html/default。这好像Apache没有意识到正在调用哪个主机(尽管PHP中的$_SERVER的转储确实显示了预期的HTTP_HOST值,即:127.0.0.1.1,dummy.dev.dev或tests.devss.dev,具体取决于我访问哪个URL。(

我想念什么?

我不清楚这是Apache问题还是Docker One。

(请注意,这与如何在具有不同端口的同一域上托管多个应用程序是一个不同的问题。在我的情况下,我确实希望虚拟主机都在内部/同一应用程序/端口/端口/容器上。(

事实证明这是一个apache配置问题。

我需要明确启用域名为"虚拟霍斯特",例如:

NameVirtualHost *:80

这个答案有帮助。

Docker与此事无关。

fab/centos不存在于公共码头枢纽中,因此不确定您为什么会遇到问题。

我的建议是退后一步,尝试以一个简单的示例使它起作用。

docker search apacheeboraas/apache作为大多数标记的图像产生,所以我将在示例中使用该图像。

在测试目录中,使用您的示例:

文件:httpd.conf

<VirtualHost *:80> # first host = default host
    DocumentRoot /var/www/html/default
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/dummy
    ServerName dummy.dev
    ServerAdmin webmaster@dummy.dev
    ErrorLog logs/dummy.dev-error_log
    CustomLog logs/dummy.dev-access_log common
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/tests
    ServerName tests.dev
    ServerAdmin webmaster@tests.dev
    ErrorLog logs/tests.dev-error_log
    CustomLog logs/tests.dev-access_log common
</VirtualHost>

然后创建VHOST网站&amp;日志目录。

mkdir -p logs; for i in default tests dummy; do mkdir -p $i; echo "hello $i" > $i/index.html; done

最后,运行Docker。

docker run -it -v $(pwd):/var/www/html -v $(pwd)/httpd.conf:/etc/apache2/sites-available/000-default.conf -v $(pwd)/logs:/etc/apache2/logs -p 9090:80 --rm --name apache_c eboraas/apache

请注意,我基本使用的卷与您在docker-compose.yml中使用的卷,除了我使用 site-available而不是更改httpd.conf。

要测试,请确保您的/etc/hosts中的dummy.dummy.dev。

$> curl dummy.dev:9090
hello dummy
$> curl tests.dev:9090
hello tests

从这一点开始,首先尝试使用的docker apache映像,然后尝试使用自定义/etc/hosts文件,然后将其放回docker-compose文件

,然后尝试使用Docker Apache映像 ,请尝试使用Docker Apache映像

在您的httpd config:

中打开nameVirtualHost

file:/etc/httpd/conf/httpd.conf

NameVirtualHost *:80 
NameVirtualHost *:443

最新更新