问题是这样的:

我内网主机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教学平台录播地址…