我有一个正在运行的 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/hosts
,c:\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 层(应用层)。
由于hosts
文件或 DNS 协议不了解应用层,因此它们也不知道端口号。
通过添加到 hosts 文件的配置127.0.0.1:9000
就像将端口号添加到 DNS A 记录一样。
澄清这一点之后,您可以通过多种方式解决此问题:
- 在端口 80 上运行您的应用程序。修复您的问题并消除任何歧义。
- 通过 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
- 通过 socat 将机器上的 80 端口转发到 9000 端口:
apt install socat -y
socat TCP-LISTEN:80,fork TCP:127.0.0.1:9000
如果您无法更改应用程序端口,socat 将是最简单的方法。
对于日常使用,您可以编写一个 systemd 服务文件以在后台运行它。
答案2
您可以采用不同的方法:
127.0.1.1 sweetsoft repo.sweetsoft
在/etc/hosts
- 直接
repo.sweetsoft:80
在127.0.0.1:9000
你的 HTTP 服务器中(据我所知,Apache 可以使用VirtualHost
参考)。
但是,我觉得你正在使用应用程序开发服务器。使用 Apache 进行代理可能有点过头了。