如何将主机名指向 IP 地址

如何将主机名指向 IP 地址

我有一个正在运行的 Web 服务器,可以通过 调用http://localhost:9000/。我想存档的是,http://localhost:9000/我不想调用,而是想调用http://repo.sweetsoft/。我尝试按如下方式修改 hosts 文件:

127.0.0.1       localhost
127.0.1.1       sweetsoft
127.0.0.1:9000  repo.sweetsoft

如您所见,我添加了最后一行,但它不起作用。我做错了什么?

答案1

hosts这里对文件存在误解。

首先,在大多数操作系统上,hosts 文件优先于 DNS,你可以在 Linux/Unix 操作系统和 macOS 中定义它们/etc/hostsc:\windows\system32\drivers\etc\hosts 在 Windows 上

因此,当您在主机文件中添加如下记录时:

127.0.0.1  repo.sweetsoft

并尝试打开http://repo.sweetsoft/在您的浏览器中,它不会向外界发送任何 DNS 查询,而是使用来自您的 hosts 文件的此条目。

请记住,这仅适用于 A 记录(将名称或域地址解析为 IPv4 地址)和 AAAA 记录(将名称或域地址解析为 IPv6 地址),并且您不能定义 TXT 或 MX 记录。

但是端口号位于不同的网络层,hosts 文件只理解名称(如 repo.sweetsoft)和 IP 地址,它是 ISO 模型(网络/传输)中的第 3 层和第 4 层,但端口号位于第 7 层(应用层)。

检查OSI模型

在此处输入图片描述

OSI 与 TCP/IP 模型

在此处输入图片描述

由于hosts文件或 DNS 协议不了解应用层,因此它们也不知道端口号。

通过添加到 hosts 文件的配置127.0.0.1:9000就像将端口号添加到 DNS A 记录一样。

澄清这一点之后,您可以通过多种方式解决此问题:

  1. 在端口 80 上运行您的应用程序。修复您的问题并消除任何歧义。
  2. 通过 iptables 将机器上的 80 端口转发到 9000 端口
# This command will forward all requests destined to port 80 and makes a lot of conflicts, I suggest socat
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 9000
  1. 通过 socat 将机器上的 80 端口转发到 9000 端口:
apt install socat -y
socat TCP-LISTEN:80,fork TCP:127.0.0.1:9000

如果您无法更改应用程序端口,socat 将是最简单的方法。

对于日常使用,您可以编写一个 systemd 服务文件以在后台运行它。

答案2

您可以采用不同的方法:

  1. 127.0.1.1 sweetsoft repo.sweetsoft/etc/hosts
  2. 直接repo.sweetsoft:80127.0.0.1:9000你的 HTTP 服务器中(据我所知,Apache 可以使用VirtualHost 参考)。

但是,我觉得你正在使用应用程序开发服务器。使用 Apache 进行代理可能有点过头了。

相关内容