简单web服务器示例图

Web 服务器是客户端与后端应用之间的入口层,负责接收 HTTP/HTTPS 请求,并对请求进行处理、转发、优化和保护。

从实际开发角度,重点掌握下面这些就够全面了:

职责 作用 典型例子
① 接收 HTTP/HTTPS 请求 监听端口、建立连接、解析 HTTP 请求 监听 80/443
② 静态资源服务 直接返回 HTML、CSS、JS、图片、视频等 /static/logo.png
③ 路由与请求分发 根据域名、URL 等决定请求交给哪个服务 /api/user/* → user-service
④ 反向代理 将客户端请求代理到后端应用服务器 Nginx → Spring Boot
⑤ 负载均衡 将请求分配给多台后端服务器 Server1 / Server2 / Server3
⑥ HTTPS / TLS 管理证书、TLS 握手、加解密 HTTPS → 内部 HTTP
⑦ 缓存 缓存静态资源或响应,降低后端压力 Cache-Control、代理缓存
⑧ 压缩与性能优化 减少网络传输量、提高响应速度 gzip、Brotli
⑨ 安全与访问控制 限流、IP 控制、请求大小限制等 单 IP 每秒最多 100 请求
⑩ 日志与监控 记录请求、响应状态、耗时、错误 access.log、error.log
⑪ 错误处理 处理异常情况并返回合适的 HTTP 响应 404、502、503

最核心的工作流程

把上面所有东西放到一张逻辑图里,就是:

arduino 复制代码
                    客户端
              浏览器 / App / 爬虫
                     │
                     │ HTTP/HTTPS
                     ↓
          ┌─────────────────────┐
          │     Web Server      │
          │   Nginx / Apache    │
          │                     │
          │ ① 接收请求          │
          │ ② 解析请求          │
          │ ③ 路由/分发         │
          │ ④ HTTPS             │
          │ ⑤ 安全/限流         │
          │ ⑥ 缓存/压缩         │
          │ ⑦ 日志/监控         │
          └─────────┬───────────┘
                    │
          ┌─────────┴──────────┐
          ↓                    ↓
      静态资源              动态请求
          │                    │
     HTML/CSS/JS               │ 反向代理
     图片/视频                 ↓
          │             ┌──────────────┐
          │             │  后端应用    │
          │             │ Spring Boot  │
          │             │ Go / Python  │
          │             └──────┬───────┘
          │                    ↓
          │              MySQL / Redis
          │                    │
          └──────────┬─────────┘
                     ↓
                  返回响应

这里尤其要区分 Web Server 和后端应用

Web Server 更关心"请求怎么进来、往哪里送、怎么安全高效地送"。

后端应用更关心"这个请求具体要执行什么业务逻辑"。

比如:

bash 复制代码
GET /api/users/1001

可能经历:

scss 复制代码
浏览器
  ↓
Nginx
  │
  ├─ HTTPS 解密
  ├─ 限流
  ├─ 记录日志
  ├─ 判断路由
  │
  ↓
user-service
  ↓
Spring MVC 路由
  ↓
UserController
  ↓
getUser(1001)
  ↓
MySQL

路由也可以这样理解

markdown 复制代码
Web Server 路由
     ↓
"应该交给哪个服务?"

后端框架路由
     ↓
相关推荐
SimonKing1 小时前
SwitchHosts V5大改版,我发现了这些惊喜和坑
java·后端·程序员
坤岭1 小时前
企业级RAG全链路
后端
Csvn1 小时前
📊 SQL 入门 Day 23:存储过程与函数
后端·sql
weixin_431600441 小时前
Agent Workflow 学习向:最小拖拽画布,看得见地编排,再一键跑通
后端·学习·ai·dify
IT_陈寒2 小时前
Python的列表拷贝坑得我原地打转
前端·人工智能·后端
山甫aa2 小时前
日志技术 Logback + Slf4j —— 从零开始的 Web 后端学习
java·后端·学习·web·logback
SomeB1oody3 小时前
【RustyML入门】7.3. 性能调优与并行
开发语言·后端·机器学习·rust·教程
手握风云-3 小时前
Spring Cloud:分布式系统的“粘合剂”(六)
后端·spring·spring cloud
BingoGo3 小时前
NativePHP v4 让 Blade 构建原生 iOS 与 Android 界面
后端·php