为什么无法在本地计算机外部访问此端口?



我有一个node.js服务器在EC2实例上运行。我可以通过访问12.345.678.90:2112(不是实际的网站,只是一个例子(连接到我的index.html页面。稍后,我打开了一个正在监听端口3113的套接字连接。当我在机器上时,我可以通过localhost(localhost:3113/foo(访问网页。当我试图通过12.345.678.900:3113/foo在本地机器外访问它时,我无法访问它。套接字连接成功,当我运行netstat时,服务器正在监听3113,但它不允许我访问页面。我有一种感觉,我的端口可能被阻止了,但据我所知,它不应该被阻止。不过,当我在本地机器上运行此服务器时,我没有这个问题。

传入连接

解决方案:

由于curl告诉我端口3113没有打开,但它在AWS上没有被阻止,我查看了代码,意识到我打开了端口3113,但很快就关闭了它,这意味着当我收到一条日志语句,告诉我端口是打开的,因为它几乎立即关闭,我无法访问端口。

设置TCP侦听端口时,必须指定IP地址和端口号。如果您的服务器正在侦听127.0.0.1:3113,则无法从其外部IP地址访问它。您还可以指定特殊的0.0.0.0作为IP地址,这表示您想在"中侦听该端口;所有";IP地址(对于"全部"的一些定义(。

如果您的机器有多个网络接口(例如,多个网卡或虚拟化网络接口(,那么在不同的网络上可能存在相同的ip地址,并且您在收听它们时必须指定特定的网络接口。但是,如果你真的建立了这样一个不同寻常的东西,你可能已经知道这些网络东西了。请注意,如果您有Docker或虚拟机,它们也可能为每个容器/VM创建虚拟网络接口。

在AWS/EC2上,您的机器可能还有只能从VPC访问的内部IP地址和可以直接从外部访问的弹性IP。你没有说哪个";外部";您正在使用的IP地址。

最后,您可能在服务器上安装了防火墙。ipfw或iptable可能有阻止外部侦听端口的规则。

最新更新