简单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 路由
     ↓
"应该交给哪个服务?"

后端框架路由
     ↓
相关推荐
考虑考虑8 小时前
cmd局部设置java变量
运维·后端·自动化运维
陈随易11 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
wing9812 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan12 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
步行cgn13 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring
凤山老林13 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
苏三说技术13 小时前
Kafka已正式接入AI
后端
企业数字化笔记13 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
IT_陈寒13 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
momo0611713 小时前
Redis新手入门 -- 学习笔记
redis·后端