Networking
Gevent/Flask 應用程序未在 Windows 2012 R2 上偵聽外部 IP
Windows 2012R2 伺服器,唯一安裝的功能是正在偵聽埠 80 的 IIS。
我有一個 GEvent/Flask 應用程序,它在 5000 上偵聽入站 TCP 連接(並公開一個 REST API),但無法弄清楚為什麼入站連接沒有路由到應用程序。這是我檢查過的:
- 應用程序已啟動並偵聽埠 5000
- 入站埠規則配置為允許埠 5000 上的所有入站 TCP 流量。我或多或少地排除了這個問題,因為該配置與其他正確路由的埠相同,即使下面列出的步驟失敗了防火牆完全禁用。
- DNS 配置正確,通過遠端訪問工作確認,並且 IIS 伺服器在以 DNS 名稱為目標時響應埠 80 上的 Web 請求
- 與網路人員確認伺服器前面不存在防火牆或過濾器
來自 Internet Explorer 的以下測試證明了該問題:
- 在伺服器上執行 IE,連接到
'http://localhost'
. 成功命中 IIS- 在伺服器上執行 IE,連接到
'http://localhost:5000'
. 成功點擊應用程序- IE在伺服器上執行,連接
'http://servername:5000'
顯示“頁面無法顯示”。失敗- IE 在遠端機器上執行,連接到
'http://servername'
. 成功命中 IIS。- 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 流量,因為他們希望開發人員在前面設置一個反向代理)。