我有一个运行Ubuntu的AWS EC2实例。
我有一个Parse服务器,在localhost上运行,端口1337.我在实例的安全组中启用了该端口。
我试图检查是否以及如何使用localhost
命令访问实例的wget
,并检查是否存在连接或连接是否被拒绝,这些是结果:
$ wget http://<Public IP>:1337/parse
Connecting to <Public IP>:1337... failed: Connection refused.
$ wget http://<Private IP>:1337/parse
Connecting to <Private IP>:1337... failed: Connection refused.
$ wget http://localhost:1337/parse
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:1337... failed: Connection refused.
$ wget http://<Public DNS>:1337/parse
Resolving <Public DNS> (<Public DNS>)... <Private IP>
Connecting to <Public DNS> (<Public DNS>)|<Private IP>|:1337... failed: Connection refused.
如您所见,我检查了公共IP,公共DNS和私有IP。
它总是说它失败了,因为connection refused
,由于某种原因,甚至本地主机都被服务器拒绝。
如何使localhost
可以从其内部网络外部访问并访问Parse服务器?
答案 0 :(得分:2)
公共IP地址通常与外部接口在本地使用的私有IP地址不同。要查看私有IP地址,您可以运行:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:8c:dd:df:8d:ff brd ff:ff:ff:ff:ff:ff
inet 172.19.240.213/24 brd 172.19.240.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::88c:ddff:fedf:8cff/64 scope link
valid_lft forever preferred_lft forever
这显示您的接口:lo
,localhost环回,是127.0.0.1。 eth0
,外部接口,是172.19.240.213。请注意,它是172.16.0.0/12块中的私有IP,不会被路由到Internet。 AWS应用另一层NAT,将最终的公共IP地址映射到您的EC2实例。
一般情况下,您应该遵循Vorsprung的建议并简单地绑定到0.0.0.0。如果您想直接绑定到eth0
,可以像这样查找地址。
答案 1 :(得分:1)
两件事
首先,您不会说服务器正在运行但是要更改它以便它正在侦听所有地址。通常这是通过给出0.0.0.0作为绑定地址来完成的。执行此操作并重新启动服务器进程后,使用服务器上的shell中的ss
命令进行检查:
$ ss -nl|grep 8082
LISTEN 0 100 :::4040 :::*
如果&#34;本地地址:端口&#34;由ss给出的是127.0.0.1然后它只是在localhost上监听而且无法访问
接下来,使用浏览器中服务器shell上hostname
给出的地址
答案 2 :(得分:0)
我通过使用EC2实例的公共IP来解决它,并且我能够访问在其上运行的Parse服务器。