如何在使用 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 来指向同一个项目。谁能帮我解决这个问题?
- 您需要解决您的两个域在访问时都指向本地主机。在 /etc/hosts 添加:
127.0.0.1 xyz.com
127.0.0.1 xyz.net
现在,如果您在浏览器中访问 xyz.com 或 xyz.com,它将解析为您的本地计算机。
- 将 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.
- 在您的 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"
我有两个域共享相同的代码库和数据库。现在我需要两个域来连接到各自域的两个不同数据库。我正在使用 docker compose 在我的本地设置中提供服务。然后我转到我的浏览器并输入 localhost:2000 以查看我的项目服务。我需要两个不同的域,比如 xyz.com 和 xyz.net 来指向同一个项目。谁能帮我解决这个问题?
- 您需要解决您的两个域在访问时都指向本地主机。在 /etc/hosts 添加:
127.0.0.1 xyz.com
127.0.0.1 xyz.net
现在,如果您在浏览器中访问 xyz.com 或 xyz.com,它将解析为您的本地计算机。
- 将 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.
- 在您的 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"