Networking

Gevent/Flask 應用程序未在 Windows 2012 R2 上偵聽外部 IP

  • May 12, 2020

Windows 2012R2 伺服器,唯一安裝的功能是正在偵聽埠 80 的 IIS。

我有一個 GEvent/Flask 應用程序,它在 5000 上偵聽入站 TCP 連接(並公開一個 REST API),但無法弄清楚為什麼入站連接沒有路由到應用程序。這是我檢查過的:

  1. 應用程序已啟動並偵聽埠 5000
  2. 入站埠規則配置為允許埠 5000 上的所有入站 TCP 流量。我或多或少地排除了這個問題,因為該配置與其他正確路由的埠相同,即使下面列出的步驟失敗了防火牆完全禁用。
  3. DNS 配置正確,通過遠端訪問工作確認,並且 IIS 伺服器在以 DNS 名稱為目標時響應埠 80 上的 Web 請求
  4. 與網路人員確認伺服器前面不存在防火牆或過濾器

來自 Internet Explorer 的以下測試證明了該問題:

  1. 在伺服器上執行 IE,連接到'http://localhost'. 成功命中 IIS
  2. 在伺服器上執行 IE,連接到'http://localhost:5000'. 成功點擊應用程序
  3. IE在伺服器上執行,連接'http://servername:5000'顯示“頁面無法顯示”。失敗
  4. IE 在遠端機器上執行,連接到'http://servername'. 成功命中 IIS。
  5. IE在遠端機器上執行,連接'http://servername:5000'顯示“頁面無法顯示”。失敗。

我不知道接下來要檢查什麼,有什麼建議可以阻止到埠 5000 的流量嗎?

謝謝伊恩

要處理傳入的 TCP/IP 流量,請務必在 Windows 防火牆上打開 TCP/UDP 埠。但這只是第一步。之後,應用程序必須將自己連接到該埠並設置綁定來處理傳入的數據包。

在您的特定情況下,HTTP 數據包http://servername:5000被拒絕,不是因為防火牆,而是因為您的應用程序沒有在埠 5000 上設置正確的綁定。請求在http://localhost:5000起作用,所以我們可以假設它的綁定實際上localhost:5000只是,因此,只能處理 localhost 流量。

要解決此問題,您有多種選擇,

  • 修改您的應用程序以綁定到*:5000(或+:5000),
  • 或者設置一個反向代理(如 nginx)來橋接外部流量localhost:5000(事實上,這就是為什麼許多框架預設只接受 localhost 流量,因為他們希望開發人員在前面設置一個反向代理)。

引用自:https://serverfault.com/questions/1016811