无法在运行Debian的Google Compute Engine上打开端口8080

时间:2014-09-17 01:01:20

标签: google-compute-engine

我正在尝试运行一个简单的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()

5 个答案:

答案 0 :(得分:31)

您的网络是否有相应的防火墙规则?按照以下步骤创建它。

  1. 转到Developers Console,然后点击相应的项目。

  2. 点击' Compute'

  3. 点击' Networks'

  4. 单击相应网络的名称。您可以看到您的实例在哪个网络中点击了VM实例'根据计算引擎'部分或使用命令:

    gcloud compute instances describe <instance> | grep "network:" | awk -F/ '{print $(NF)}'

  5. 在防火墙规则部分下,点击&#39;新建&#39;

  6. 输入防火墙规则的名称,并在字段&#39; Protocols&amp;端口&#39;类型:tcp:8080

  7. 保存规则

  8. 之后,您应该能够访问您的HTTP服务器。

    否则,您可以尝试使用以下命令查看您的计算机是否在该端口中收到SYN TCP数据包:sudo tcpdump -i eth0 port 8080

    希望有所帮助

答案 1 :(得分:7)

在GCE Web控制台&gt;网络&gt;防火墙规则&gt;编辑你的规则,删除TARGET TAGS并申请。

GL

答案 2 :(得分:0)

仍然不确定出了什么问题,但我删除了我的实例和网络然后创建了新的实例。新实例和网络似乎工作正常,所以我只能假设在使用旧网络时出现问题,因为新网络似乎没有相同的问题。

答案 3 :(得分:0)

当您创建网络规则时,可能会出现问题。描述网络规则并创建相关的MetaTag时,请确保VM实例包含相同的MetaTag,因此所需的流量将重定向到计算机。

答案 4 :(得分:0)

确保添加正确的端口。 上面的答案陈述“tcp:80”,但如果你的服务器在另一个端口上运行,这将不起作用。 这可能是它不为其他人工作的原因