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 路由
↓
"应该交给哪个服务?"
后端框架路由
↓