在Windows主机文件中使用端口号


189

安装TeamViewer后,我将wampserver端口更改为8080,因此地址为 http://localhost:8080.

对于位于C:\ WINDOWS \ system32 \ drivers \ etc \的主机文件,我也进行了如下更改

之前
127.0.0.1 www.example.com


127.0.0.1:8080 www.example.com

当我访问www.example.com时,它不会重定向到我的wampserver,该如何解决?


您需要NGNIX或Apache HTTP服务器作为代理服务器,以将http请求转发到适当的应用程序->侦听特定端口(或使用提供托管公司的CNAME进行此操作)
Musa


也许对此进行审查并将可接受的答案切换为netsh答案?当试图弄清楚如何将.test域映射到Windows 10本地的docker镜像时,我到这里结束了,netsh的答案就像一个魅力!
Jereme

问题是:您是在尝试将整个主机重定向到单个端口(?!),还是仅将(该主机的)端口80重定向到端口8080?此处的大多数答案是有关如何将主机的端口80重定向(或至少尝试重定向... ;-)到“ localhost”的端口8080的。示例:https://www.example.com必须转到端口8080?还是默认的443?(这应该正确)是什么意思:您是否还希望将https重定向到本地主机的8080端口?还是您根本不在乎将其重定向到什么地方?
ilias iliadis

Answers:


193

hosts文件仅用于主机名解析(在Windows以及类似Unix的系统上)。您无法在其中放置端口号,并且无法通过通用的OS级配置来完成所需的操作-浏览器是选择端口的选择。

因此,使用书签或类似的东西。
(某些防火墙/路由软件可能允许出站端口重定向,但这听起来并不像是一个吸引人的选项。)


6
如何使用书签,您能否引导我们访问此链接或一些文档或教程
adham dwikat

@Jereme:您应该告诉OP,我对此无能为力
Mat

1
@Mat很好,对吗?我只希望看到此内容的其他人向下滚动一点,然后试一试。当试图弄清楚如何将.test域映射到Windows 10本地的docker镜像时,我到这里结束了,netsh的答案就像一个魅力!
Jereme

169

您可以通过Fiddler 2应用程序修改hosts文件来实现。

跟着这些步骤:

  1. 安装Fiddler2

  2. 导航到Fiddler2菜单:- 工具 > 主机 ..(单击以选择)

  3. 添加这样的一行:

    localhost:8080 www.mydomainname.com

  4. 保存文件,然后www.mydomainname.com在浏览器中签出。


34
这是一个不好的解决方案。您需要始终运行Fiddler。
James Huckabone 2015年

48
@JamesHuckabone:您有更好的解决方案吗?我们会喜欢的!
Rajat Gupta 2015年

16
使用这种方法时,我收到错误400错误的请求
2015年

3
这似乎不再起作用。既fiddler2和fiddler4试了一下

1
@basher U仍然可以肯定地在Fiddler's Rules.js中编写脚本。Fiddler上的主机功能不是Windows主机文件,而是重新命名该名称以使其易于使用。就像自动回复程序一样,它们只是您可以直接编写脚本的一部分。如果您无法使用菜单执行某些操作,请编写脚本。
m3nda '16

157

我设法通过使用Windows附带的联网工具来实现这一目标netsh

正如Mat所指出的:hosts文件仅用于主机名解析,因此两者的结合为我解决了问题。


总览

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

动作

  • 启动我的服务器 localhost:8081
  • 主机文件中添加了我的“本地DNS” 作为新行
    • 127.65.43.21 example.app
      • 可以使用网络127.0.0.0/8127.x.x.x)中的任何空闲地址。
      • 注意:我假设127.65.43.21:80未被其他服务占用。
      • 您可以检查 netstat -a -n -p TCP | grep "LISTENING"
  • 使用netsh命令实用程序 添加了以下网络配置
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • 我现在可以在访问服务器 http://example.app

注意:
-这些命令/文件修改需要以管理员权限执行

- netsh的端口代理需要IPv6库,甚至只使用v4tov4,通常他们也将被默认包括在内,否则使用下面的命令来安装:netsh interface ipv6 install


您可以看到使用以下命令添加的条目

netsh interface portproxy show v4tov4

您可以使用以下命令删除条目

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


链接到资源:


这对我不起作用。在显示的链接中,它显示“也不能使用127.0.0.1作为connectaddress。”。
Don Box

@DonBox:如果您提供有关安装的更多详细信息,也许我可以帮助您。在呈现的情况下,基本上需要使用127.0.0.1作为连接地址,因为服务器默认情况下是在许多其他程序处从localhost启动的。如果你能在你不需要全端口转发机制,另一个地址开始,你只需要修改hosts文件......或许,正如这里详细,你还没有IPv6协议的安装:使用下面的命令来安装他们:netsh interface ipv6 install
波哥马拉米雷斯

13
这应该是一个可以接受的答案,因为这些工具已经安装在我的基本Windows 10安装中,并且恰好满足了我的需要。我当时正在考虑安装apache和mod_proxy,但这是一个更好的解决方案。
Max Young

1
对我不起作用。Netsh似乎转发地址,但不转发端口。
steph643

2
我使用docker的portainer。它在端口9000上使用localhost。在上面的命令中,我使用portainer.local无需在地址上指定端口。首先,在主机文件中添加127.0.0.1要匹配的地址portainer.local。然后我运行:netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 在cmd / powershell中按Enter键运行它。之后,通过键入退出netsh exit。在浏览器中,http://portainer.local现在输入可以将我带到以前的位置http://localhost:9000。这对我来说就像是一种魅力。
EffectiX

14

Fiddler2->规则->自定义规则

然后在末尾的下一个脚本中找到OnBeforeRequest函数:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

确实,Fiddler的功能如此强大,比没有在端口80甚至Skype上运行Web服务器的功能强大得多。在Windows上,比起具有Mono的Linux而言,在捕获功能方面,Linux更好,因为cuz Linux不使用CLRL的Inet。这是在Fiddler上做事的更好的方法,因为它可以通过1个文件导出。
m3nda '16


2

-您可以使用网络127.0.0.0/8中的任何空闲地址,在我的情况下,这是python flask所需的,这就是我所做的事情:在hosts文件中添加此行(您可以在Windows下找到它:C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • 在我的情况下,请确保端口为默认端口“ 80”,这在python烧瓶中是这样的: app.run("127.0.0.5","80")

  • 现在运行您的代码并浏览 flask.dev


1

如果正在发生的事情是您在本地主机上运行了另一台服务器,并且想给该新服务器一个不同的本地主机名,例如 http://teamviewer/

我认为您真正要寻找的是虚拟主机功能。我使用Apache,所以我不知道其他Web守护程序如何支持此功能。也许叫做Alias。这是Apache文档:

Apache虚拟主机示例


1

使用netsh与connectaddress = 127.0.0.1不适用于我。

尽管在Internet上到处都是,但我找不到解决该问题的解决方案,该解决方案是使用connectaddress = 127.xxx(即任何127. ipv4地址,而不是127.0.0.1),因为这似乎链接回本地主机相同但没有限制,因此环回在netsh中有效。


我建议您删除第一段和最后一段。只需说现有的解决方案不起作用,您便找到了另一个解决方案。否则,您的答案看起来很像是评论,因此人们可能会将其标记为“不是答案”,并且该评论将被删除。
StaceyGirl


0

您需要NGNIX或Apache HTTP服务器作为代理服务器,以将http请求转发到适当的应用程序->侦听特定端口的应用程序(或使用提供托管公司的CNAME进行处理)。这是最强大的解决方案,这只是保持DNS记录指向服务器时自动添加新子域或自动添加新域的一种简单方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.