為什么外網主機可以telnet通內網nginx端口,但是http請求失敗?

問題是這樣的:

我內網主機nginx配置了 域名+80端口,然后防火墻沒有配置80端口,但是外網機子去telnet 80端口可以通,用瀏覽器請求域名不能訪問nginx,然后防火墻開了80端口后,瀏覽器就可以訪問nginx了,為什么防火墻沒開80端口,telnet可以訪問?nginx又不行?

其根本原因在于?TCP連接建立?和?HTTP應用層請求?是兩個不同的階段,而防火墻規則可以精細地控制這兩個階段。

讓我們來分解一下整個過程:

1. Telnet 為什么能通?

當您執行?telnet your_domain 80?時,發生了以下事情:

  1. TCP三次握手:Telnet 工具會嘗試與您服務器的80端口建立一個原始的?TCP 連接

  2. 防火墻的默認策略:許多防火墻(如?firewalldiptables)的默認策略是?允許出站(OUTPUT)和相關的回包(ESTABLISHED, RELATED)

    • 您的?telnet?請求從外網機器發出,是一個?出站請求

    • 當這個請求到達您的內網服務器時,服務器需要回應這個SYN包來完成三次握手。這個回包屬于?與已有連接相關的包(RELATED/ESTABLISHED)

  3. 關鍵點:在沒有明確添加?80/tcp?規則時,防火墻允許了這次TCP連接建立的“回包”。因此,三次握手成功,TCP連接建立。

  4. Telnet 的成功標準:對于 Telnet 來說,只要TCP連接能建立,它就認為“端口是通的”,并顯示?Connected to your_domain...。此時,連接已經建立,Telnet 在等待您輸入數據(雖然您沒輸入就退出了)。

簡單來說:Telnet 成功只證明了從外網到您服務器80端口的TCP通道是打開的,并且防火墻允許了針對外網請求的“回包”。


2. 瀏覽器為什么之前不能訪問?

當您在瀏覽器中輸入?http://your_domain?并按下回車時,發生了更多事情:

  1. TCP連接建立:和 Telnet 一樣,瀏覽器首先會發起一個到服務器80端口的TCP三次握手。由于上述同樣的原因,這一步成功了

  2. 發送HTTP請求:TCP連接建立后,瀏覽器會通過這個連接,發送一個實際的HTTP請求,例如?GET / HTTP/1.1 Host: your_domain ...

  3. nginx 處理請求:nginx 守護進程監聽在80端口,它接收到這個HTTP請求,開始處理。

  4. nginx 發送HTTP響應:nginx 處理完請求后,需要將網頁內容(如HTML、CSS等)作為?HTTP響應,通過剛才建立的TCP連接發回給瀏覽器。

  5. 防火墻的攔截:問題就出在這里!nginx 發送回的數據包,在通過服務器的防火墻時,防火墻會檢查規則:

    • 這條從內網服務器發往外部瀏覽器的HTTP響應數據,屬于?新建的出站連接??不是,它是ESTABLISHED連接的一部分。

    • 但是,防火墻策略需要決定是否允許?從80端口發起的出站流量。雖然默認允許回包,但其規則的嚴格程度可能有細微差別。

    • 更可能的情況是:在您沒有明確添加?80/tcp?規則時,防火墻認為80端口的所有通信(無論是進還是出)都沒有被顯式允許。雖然它放行了握手包,但對于后續數據傳輸的管控更加嚴格,它丟棄了nginx試圖發送出的HTTP響應數據包

  6. 瀏覽器超時:瀏覽器發送了HTTP請求后,一直在等待服務器的響應。因為響應數據包被防火墻丟棄了,它什么也收不到。等待一段時間后,就會觸發超時,顯示?“無法訪問此網站”、“連接已重置”?或?“ERR_CONNECTION_TIMED_OUT”?等錯誤。


3. 為什么開了防火墻端口后就一切正常了?

當您在防火墻中明確添加了允許?80/tcp?端口的規則后,您不僅僅是“打開了端口”。您實際上是創建了一條明確的、永久的策略,告訴防火墻:

“允許所有目的地為80端口的傳入流量,并且與此連接相關的所有進出流量都應被允許。”

這條規則確保了:

  1. TCP三次握手的SYN包被允許進入。

  2. nginx產生的HTTP響應數據包也能順利地通過防火墻發回給外部的瀏覽器。

因此,整個HTTP通信流程就暢通無阻了。

總結與類比

您可以把它想象成一個門衛快遞員

  • Telnet(敲門):門外有人敲門(SYN包),門衛聽到后,打開門看了一眼又關上了(回SYN-ACK包)。敲門的人知道門后有人(Telnet連接成功),但還沒等說話就走了。

  • 瀏覽器(送貨請求):門外的人敲門,門衛開門(TCP握手成功)。門外的人說:“我是快遞員,這是給你的包裹(HTTP Request)”。門內的nginx接過包裹準備處理。但當nginx拿著回執單(HTTP Response)要遞給門外的快遞員時,門衛卻攔住了他,不讓他遞出去(防火墻丟棄數據包)。快遞員在門外等不到回執,只好離開(瀏覽器超時)。

  • 開了防火墻(給門衛指令):門衛得到明確指令:“所有快遞相關事務都放行”。于是整個收取包裹、遞回回執的過程暢通無阻。

結論:
Telnet測試的是TCP層的連接性,而瀏覽器訪問需要完成完整的HTTP應用層交互。防火墻在沒有明確規則時,其默認行為可能允許簡單的連接測試,但會阻止更復雜的數據傳輸。顯式地打開端口意味著為整個通信流程提供了完整的允許策略。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95792.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux游記】基礎指令篇

?????? 楓の個人主頁 你不能改變過去,但你可以改變未來 算法/C/數據結構/C/Linux Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C,C更新的同時我也會更新Linux。Linux操作系統是很經典的…

阿里云-基于通義靈碼實現高效 AI 編碼 | 4 | 場景學習:3分鐘寫一個音樂鬧鐘小應用

文章目錄一、初版需求與代碼生成二、需求迭代與代碼更新三、需求細化與功能完善3.1 pygame安裝3.2 放置音樂文件3.3 執行代碼免費個人運維知識庫,歡迎您的訂閱:literator_ray.flowus.cn 一、初版需求與代碼生成 首先向通義靈碼提出了基本需求&#xff1…

【算法筆記】歐拉降冪公式與歐拉函數

歐拉降冪公式 在數論中,歐拉降冪公式是一個強大的工具,用于簡化大指數模運算。公式如下: ?k>φ(m),有Ak≡Akmodφ(m)φ(m)(modm)成立。\forall k > \varphi(m),有 A^k \equiv A^{k \mod \varphi(m) \varphi(m…

基于STM32的交通燈設計—緊急模式、可調時間

基于STM32交通燈設計(仿真+程序+設計報告)功能介紹具體功能:1.數碼管和LED模擬交通燈;2.南北綠燈9秒,東西綠燈15秒,黃燈2秒;3.緊急情況:按下按鍵,…

汽車軟件研發智能化:AI在CI/CD中的實踐

當汽車行業加速駛入“軟件定義”的時代,軟件已成為決定車輛競爭力的核心要素。從智能座艙的多場景交互到自動駕駛的復雜決策邏輯,汽車軟件的代碼量逐年遞增,復雜度呈指數級攀升,傳統研發流程深陷困境:代碼質量管控滯后…

DeepSeek:開啟智能體驅動對話式數據分析新時代

在數字化浪潮洶涌澎湃的當下,數據已然成為驅動企業發展、推動科學研究以及優化日常生活決策的關鍵力量。數據分析,作為從海量數據中提取有價值信息、洞察趨勢、挖掘規律的核心手段,其重要性不言而喻。無論是企業精準把握市場動態、優化運營流程,還是科研人員探索未知領域、…

MCP驅動企業微信智能中樞:企業級機器人服務構建全攻略

一、背景與目標 公司規模200-300人,主要使用企業微信作為內部溝通平臺。日常面臨大量重復性通知工作,如會議提醒、系統維護通知、項目進度更新等。 業務痛點: 人工發送通知效率低下,平均3分鐘/條重要信息傳遞不及時&#xff0c…

語音識別系統的技術核心:從聲音到文字的智能轉換

語音識別技術,也稱為自動語音識別(ASR),其核心目標是將人類語音信號轉換為對應的文本或指令。隨著人工智能的發展,語音識別已成為智能助手、實時翻譯、車載系統等領域的關鍵技術。其工作原理可分解為信號處理、特征提取…

《用 Django 構建博客應用:從模型設計到文章管理的全流程實戰》

《用 Django 構建博客應用:從模型設計到文章管理的全流程實戰》 一、引言:為什么選擇 Django 構建博客系統? 在 Python 的 Web 框架中,Django 被譽為“全能型選手”。它不僅提供了強大的 ORM、模板系統、認證機制和后臺管理,還鼓勵開發者遵循“DRY”(Don’t Repeat You…

以 R1 為視角,手把手教你畫 OSPF 最短路徑樹與推導路由表

視頻版講解>>>>>>>>>>>>>>>>>>>OSPF最短路徑樹構建與路由計算練習(一) 在 OSPF 協議的學習中,“紙上談兵” 不如 “實戰推演”—— 尤其是以特定路由器為主視角,從 LS…

axios請求緩存與重復攔截:“相同請求未完成時,不發起新請求”

import axios from "axios";// 1. 緩存已完成的請求結果(key:請求URL參數,value:數據) const requestCache new Map(); // 2. 記錄正在執行的請求(避免并行重復請求) const pendingR…

k8s的SidecarSet配置和initContainers

目錄引言一、k8s如何實現Sidecar這段配置正確嗎?正確的配置方式為什么這樣做?一個簡單的例子總結二、什么是SidecarSet主要功能使用場景示例配置三、也可以通過 initContainers 的 restartPolicy 實現邊車邏輯四、題外話:什么是InitContainer…

PostgreSQL與SQL Server:為什么 PostgreSQL遙遙領先

PostgreSQL與SQL Server:為什么 PostgreSQL遙遙領先 在數據庫領域,PostgreSQL 和 Microsoft SQL Server 長期以來一直是競爭對手。然而,近年來,PostgreSQL 以其性能、靈活性和創新功能讓 SQL Server 望塵莫及。以下是對 PostgreSQL 明顯優越的…

零跑汽車8月交付57066臺,同比增長超88%

零跑汽車官宣,在剛剛過去的8月份,品牌交付57066輛,同比增長超88%再創歷史新高,并實現了連續6個月穩坐新勢力銷冠。目前,零跑旗下共有T03、B10、B01、C01、C10、C11、C16等七款車型在售,得益于零跑堅持全棧自…

DNS地址推薦

DNS地址推薦(2025年最新整理) 以下DNS服務器按使用場景分類,涵蓋國內、國際、安全隱私、游戲優化等需求,均為2025年仍在維護的公共DNS服務: 一、國內通用DNS(適合中國大陸用戶) 國內DNS服務器對…

興趣電商內容數據洞察未來市場走向研究——基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的實踐

摘要:在互聯網電商數據高度透明的當下,“已發生”的品類規模和品類增速數據雖易獲取,但主要反映市場歷史狀況,難以預測未來走向。興趣電商的內容數據因揭示消費者“新需求”和“潛在需求”,在宏觀層面更早體現用戶消費…

【已更新文章+代碼】2025數學建模國賽A題思路代碼文章高教社杯全國大學生數學建模-煙幕干擾彈的投放策略

截止周四晚上11點已更新五個問題完整建模和問題一二的代碼 截止周五早上完整版已更新 可以看主頁最新博文獲取 完整內容請看文末最后的推廣群2.1問題1的分析 問題1是典型的確定性時空幾何與運動學計算問題,核心在于通過建立坐標系下的參數方程,量化煙幕云…

UE4 Rider如何直接調試PC DebugGame

背景1、用UBT 打了一個exe的包,打開時遇到崩潰,想獲知這個崩潰時的中間信息,例如材質信息,于是我直接雙擊 打包位置下的崩潰dmp文件 (MyGame/Saved/Archived/WindowsClient/MyGame/Saved/Crashes/....dmp) …

【FastDDS】Layer DDS之Domain ( 06-Partitions )

在DDS(Data Distribution Service,數據分發服務)中,Partition(分區) 是一種在“域(Domain)”提供的物理隔離基礎上,為發布者(Publisher)和訂閱者(Subscriber)新增的邏輯隔離與通信篩選機制。它的核心作用是在“域”和“主題(Topic)”之外,進一步精細化控制哪些…

FastVLM:高效視覺編碼助力視覺語言模型突破高分辨率效率瓶頸

想要掌握如何將大模型的力量發揮到極致嗎?葉梓老師帶您深入了解 Llama Factory —— 一款革命性的大模型微調工具。 1小時實戰課程,您將學習到如何輕松上手并有效利用 Llama Factory 來微調您的模型,以發揮其最大潛力。 CSDN教學平臺錄播地址…