在 docker 容器中的 nginx 中设置 2 个虚拟主机,并通过主机名寻址它们

在 docker 容器中的 nginx 中设置 2 个虚拟主机,并通过主机名寻址它们

我已经搜索过了,但我不太确定我找到的问题是否涵盖了我的问题。

我有一台虚拟机(ubuntu 16.04.04 LTS),其中已经安装了 docker,并且正在运行 nginx 网络服务器(运行良好)。

我不想设置第二个虚拟主机。为此,我有一个配置文件 szenario.conf,其中包含以下几行:1. 主机2. 主办方

docker-compose.yml 如下所示:Docker 撰写 yml

现在,每当我输入虚拟机的 IP 时,我都必须输入例如 192.168.56.103:8080,它只返回第一个网站(此示例中为 speedo)。

输入 example.speedo 和 example.fakebook 会被路由到互联网并且不起作用。

我如何通过主机名使两个站点可用,以便当我导出这台机器时,另一个用户可以在他的环境中导入机器时通过输入名称轻松访问这些站点?

我必须做出什么改变?

答案1

要在浏览器的地址栏中输入主机名并让浏览器连接到虚拟机,它必须将主机名解析为 IP 地址。为此,它首先查看文件/etc/hosts并检查主机名是否已在其中定义。如果已定义,则使用文件中指定的 IP。如果没有,则执行常规 DNS 查找。

根据您的环境,您可能无法更改 DNS,因此我们首先集中精力etc/hosts(或者%SystemRoot%\system32\drivers\etc\hosts如果您的操作系统是 Windows)。这是您计算机的本地文件,因此您在此处所做的任何更改都只会影响您自己的浏览器。

为了能够在浏览器中打开“example.speedo”和“example.fakebook”并连接到您的 nginx,请将以下行附加到您的 hosts 文件中:

192.168.56.103 example.speedo example.fakebook

它所做的就是告诉您的计算机,名称“example.speedo”和“example.fakebook”应该解析为“192.168.56.103”。

请注意,虽然这对您有用,但如果您将虚拟机提供给其他人,他们必须对其主机文件进行相同的修改。

另一个选项是更改您的 DNS。由于更改过程很大程度上取决于所使用的 DNS 服务器,我无法告诉您如何操作。您必须添加两个新区域,speedo 和 facebook,并在其中添加 DNS 条目。然后,使用同一 DNS 服务器的其他用户(这可能意味着与您在同一个网络上)可以使用您的机器,而无需编辑他们的 hosts 文件。

但是,我不建议这样做,因为在本地 DNS 服务器中使用将来可能成为官方区域的名称创建虚假区域(Facebook 有可能注册了 TLD Facebook)可能会在将来导致问题(在这种情况下,Facebook 可能某一天会停止为您服务)。

如果您使用自己拥有的域名或可在本地使用的域名(例如“local”),则可以放心地在此域名下添加名称。例如“speedo.local”和“facebook.local”或“speedo.your.name.here”和“facebook.your.name.here”。

为了不必在地址栏中指定端口,您应该在端口 80 而不是 8080 上使用 nginx。设置ports为。80:80docker-compose.yml

答案2

您必须在/etc/hosts用于访问这些主机的计算机上添加虚拟主机名。

因此,如果您在主机上运行浏览器并想要访问容器中的站点,则需要在/etc/hosts主机上的文件中添加以下几行:

192.168.56.103 example.speedo
192.168.56.103 example.fakebook

如果您的主机是 Windows 机器,则需要在“C:\Windows\System32\drivers\etc\hosts”文件中输入这些行。

另一种方法是将它们添加到您的域的 DNS 区域。

相关内容