繁体   English   中英

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

[英]Can't open port 8080 on Google Compute Engine running Debian

我正在尝试运行一个简单的 Python http 服务器,它使用微型实例在端口 8080 上显示“hello world”。 我还有 4 个 Tornado 实例在 Nginx 后面运行。在端口 80 上连接到 Nginx/Tornado 不是问题。

我已将端口 8080 添加到我的防火墙设置,并确保端口 8080 已打开并在服务器上侦听,但无论我做什么,我的连接总是被拒绝。 我尝试使用浏览器、te.net 和 wget 进行连接,但每次连接都被拒绝。

这里是output netstat -an | grep "LISTEN " 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()

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

  1. 转到开发人员控制台 ,然后单击相应的项目。

  2. 点击'计算'

  3. 点击“网络”

  4. 单击相应网络的名称。 您可以在“计算引擎”部分下单击“VM实例”或使用以下命令查看您的实例所在的网络:

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

  5. 在“防火墙规则”部分下,单击“新建”

  6. 输入防火墙规则的名称,并在“协议和端口”字段中输入:tcp:8080

  7. 保存规则

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

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

希望能帮助到你

在GCE Web控制台>网络>防火墙规则>编辑您的规则,删除目标标签并应用。

GL

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

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

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

在 GCE Web 控制台中,转到网络 > 防火墙规则 > 创建防火墙规则,然后

  • 输入新规则的名称
  • 为目标选择“.network 中的所有实例”
  • 将 0.0.0.0/0 放入源 IPv4 范围
  • 复选框 TCP 并输入 8080 作为端口并保存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM