【问题标题】:Can't open port 8080 on Google Compute Engine running Debian无法在运行 Debian 的 Google Compute Engine 上打开端口 8080
【发布时间】:2019-06-27 00:37:29
【问题描述】:

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

【问题讨论】:

  • 这里有一些好的方向,由于现场的自动完成,我错过了一件事,就是在源 IP 末尾的 /0 用于入口。一旦我将它添加到`0.0.0.0`,它就起作用了。

标签: google-compute-engine


【解决方案1】:

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

  1. 前往Developers Console并点击对应的项目。

  2. 点击“计算”

  3. 点击“网络”

  4. 点击相应网络的名称。您可以点击“Compute Engine”部分下的“VM instances”或使用以下命令查看您的实例在哪个网络中:

    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

希望对你有帮助

【讨论】:

  • 您好,感谢您的回复。我已经将 tcp:8080 添加到我的防火墙中。当我向 :8080 发送请求时,tcpdump 没有收到任何数据包。
  • 嗨,为我解决的问题是:除了 tcp:8080 我还必须添加 udp:8080('Protocols & ports' 变成 tcp:8080;udp:8080)。跨度>
  • 重要!从计算引擎打开链接会打开 httpS!您想删除该 S 并使用 HTTP(在开发时...并使用端口 8080 等...)
  • 谢谢你解决了它,但为了帮助下一个人,它不会“计算”它的 VPC 网络 -> 防火墙规则。
【解决方案2】:

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

GL

【讨论】:

  • 删除我之前添加的目标标签对我有用。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2015-05-27
        • 1970-01-01
        • 2015-10-16
        • 2019-02-14
        相关资源
        最近更新 更多