簡體   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