如何在使用 docker compose 服务时让两个虚拟主机指向同一个项目?

How to make two virtual host point and same project while using docker compose to serve?

我有两个域共享相同的代码库和数据库。现在我需要两个域来连接到各自域的两个不同数据库。我正在使用 docker compose 在我的本地设置中提供服务。然后我转到我的浏览器并输入 localhost:2000 以查看我的项目服务。我需要两个不同的域,比如 xyz.com 和 xyz.net 来指向同一个项目。谁能帮我解决这个问题?

  1. 您需要解决您的两个域在访问时都指向本地主机。在 /etc/hosts 添加:
127.0.0.1 xyz.com
127.0.0.1 xyz.net

现在,如果您在浏览器中访问 xyz.com 或 xyz.com,它将解析为您的本地计算机。

  1. 将 apache 虚拟主机配置为指向 localhost:2000,如下所示:
<VirtualHost *:80>
        ServerName xyz.com
        ProxyPreserveHost On
        ProxyRequests off

        <Location />
                ProxyPass http://localhost:2000/
                ProxyPassReverse http://localhost:2000/
                Order allow,deny
                Allow from all
        </Location>
</VirtualHost>

第二个:

<VirtualHost *:80>
        ServerName xyz.net
        ProxyPreserveHost On
        ProxyRequests off

        <Location />
                ProxyPass http://localhost:2000/
                ProxyPassReverse http://localhost:2000/
                Order allow,deny
                Allow from all
        </Location>
</VirtualHost>

启用两个虚拟主机 (sudo a2ensite [name].conf) 并重新加载 apache。 您还需要 proxy_http mod: sudo a2enmod proxy_http。 现在 url 都指向你的 localhost:2000.

  1. 在您的 PHP 应用程序中检测域并基于该域连接到您需要的任何数据库。我使用了这个文件 g.php:
<?php

var_dump($_SERVER['HTTP_HOST']);

并在 localhost:2000 的 php 中与开发服务器一起提供(您将在 docker 上使用它):

php -S localhost:2000 g.php 
PHP 7.0.33-0ubuntu0.16.04.15 Development Server started at Thu Jul  9 20:34:03 2020
Listening on http://localhost:2000

当我在浏览器中访问 xyz.net 时,我得到:string(7) "xyz.net" 当我在浏览器中访问 xyz.com 时,我得到:string(7) "xyz.com"