我正在尝试运行一个简单的Python http服务器,它使用微实例在端口8080上显示“hello world”。我还有4个Tornado实例在Nginx后面运行。在端口80上连接到Nginx / Tornado不是问题。
我已将端口8080添加到我的防火墙设置中,并确保端口8080已打开并在服务器上侦听,但无论我做什么,我的连接始终被拒绝。我尝试使用浏览器,telnet和wget进行连接,并拒绝每一个连接。
以下是netstat -an | grep "LISTEN "
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8003 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
tcp6 0 0 :::8001 :::* LISTEN
tcp6 0 0 :::8002 :::* LISTEN
tcp6 0 0 :::8003 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
这是我的iptables列表
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http-alt
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这是我正在使用的Python脚本:
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
PORT_NUMBER = 8080
#This class will handles any incoming request from
#the browser
class myHandler(BaseHTTPRequestHandler):
#Handler for the GET requests
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
# Send the html message
self.wfile.write("Hello World!")
return
try:
#Create a web server and define the handler to manage the
#incoming request
server = HTTPServer(('', PORT_NUMBER), myHandler)
print 'Started httpserver on port ' , PORT_NUMBER
#Wait forever for incoming htto requests
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()
答案 0 :(得分:31)
您的网络是否有相应的防火墙规则?按照以下步骤创建它。
转到Developers Console,然后点击相应的项目。
点击' Compute'
点击' Networks'
单击相应网络的名称。您可以看到您的实例在哪个网络中点击了VM实例'根据计算引擎'部分或使用命令:
gcloud compute instances describe <instance> | grep "network:" | awk -F/ '{print $(NF)}'
在防火墙规则部分下,点击&#39;新建&#39;
输入防火墙规则的名称,并在字段&#39; Protocols&amp;端口&#39;类型:tcp:8080
保存规则
之后,您应该能够访问您的HTTP服务器。
否则,您可以尝试使用以下命令查看您的计算机是否在该端口中收到SYN TCP数据包:sudo tcpdump -i eth0 port 8080
希望有所帮助
答案 1 :(得分:7)
在GCE Web控制台&gt;网络&gt;防火墙规则&gt;编辑你的规则,删除TARGET TAGS并申请。
GL
答案 2 :(得分:0)
仍然不确定出了什么问题,但我删除了我的实例和网络然后创建了新的实例。新实例和网络似乎工作正常,所以我只能假设在使用旧网络时出现问题,因为新网络似乎没有相同的问题。
答案 3 :(得分:0)
答案 4 :(得分:0)
确保添加正确的端口。 上面的答案陈述“tcp:80”,但如果你的服务器在另一个端口上运行,这将不起作用。 这可能是它不为其他人工作的原因