我有一个拥有80,443,22和8089的安全组。
Ports Protocol Source security-group
22 tcp 0.0.0/0 [check]
8089 tcp 0.0.0/0 [check]
80 tcp 0.0.0/0 [check]
443 tcp 0.0.0/0 [check]
但是,当我使用Python程序测试连接时,我写道:
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
p = sys.argv[1]
try:
s.connect(('public-dns', int(p)))
print 'Port ' + str(p) + ' is reachable'
except socket.error as e:
print 'Error on connect: %s' % e
s.close()
但是,我对所有端口都很好,但8089:
python test.py 80
Port 80 is reachable
python test.py 22
Port 22 is reachable
python test.py 443
Port 443 is reachable
python test.py 8089
Error on connect: [Errno 61] Connection refused
答案 0 :(得分:2)
您能够通过localhost(127.0.0.1)成功连接而不是外部连接的原因是您的服务器应用程序仅侦听localhost适配器。这意味着只有源自实例本身的连接才能连接到该进程。
要解决此问题,您需要将应用程序配置为侦听接口的本地IP地址或所有接口(0.0.0.0)。
这鞋是错的(听127 ......):
~ $ sudo netstat -tulpn | grep 9966
tcp 0 0 127.0.0.1:9966 0.0.0.0:* LISTEN 4961/python
这是正常工作(使用所有接口):
~ $ sudo netstat -tulpn | grep 9966
tcp 0 0 0.0.0.0:9966 0.0.0.0:* LISTEN 5205/python
答案 1 :(得分:0)
除了AWS安全组(看起来你已经正确设置)之外,还需要确保如果主机上有内部防火墙,那么它对所有指定的端口也是开放的。