HoRain云--Nginx处理一HTTP请求的全过程演示
创作时间:
作者:
@小白创作中心
HoRain云--Nginx处理一HTTP请求的全过程演示
引用
CSDN
1.
https://m.blog.csdn.net/sinat_57153473/article/details/145722131
Nginx架构概览
- Master进程:读取配置、绑定端口、管理Worker进程。
- Worker进程:实际处理请求(每个Worker独立处理连接,采用非阻塞事件驱动模型)。
请求处理全流程
步骤 1:接收TCP连接
- 客户端发起HTTP请求,Nginx Worker进程通过
listen
指令监听的端口(如80)接收连接。 - 若启用
keepalive
,连接会复用以减少握手开销。
步骤 2:解析HTTP请求头
- 解析请求行(如
GET /index.html HTTP/1.1
)。 - 解析Headers(如
Host
、User-Agent
、Cookie
)。
步骤 3:匹配Server块
- 根据
Host
头匹配server
块。若未匹配,使用默认的server
(第一个或标记default_server
)。
步骤 4:匹配Location块
- URI与
location
规则匹配(优先级:精确匹配=
> 前缀匹配^~
> 正则~
> 普通前缀)。
步骤 5:执行Rewrite重写
- 若配置了
rewrite
规则,URI会被修改(如伪静态化),可能触发重新匹配location
。
步骤 6:访问控制
- 执行
allow/deny
、auth_basic
认证、limit_conn
限速等模块的检查。
步骤 7:生成响应内容
- 静态文件:直接读取文件(如
root
或alias
指定路径)。 - 反向代理:通过
proxy_pass
转发请求到后端服务器(如Tomcat、Node.js)。 - 动态处理:通过FastCGI(如PHP-FPM)处理。
步骤 8:发送响应
- 将HTTP响应头与Body发送给客户端。
- 若启用
gzip
,会压缩响应内容。
步骤 9:记录日志
- 写入
access_log
(请求日志)和error_log
(错误日志)。
配置示例与流程注释
# 全局配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
# 默认文件类型与日志格式
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log combined;
# 定义上游服务器(负载均衡)
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
# 虚拟主机配置
server {
listen 80 default_server;
server_name example.com;
# 静态文件服务
location /static/ {
alias /data/static/;
expires 7d; # 缓存控制
}
# 反向代理到后端应用
location /api/ {
proxy_pass http://backend;
proxy_set_header Host $host;
}
# 重写规则示例
location /blog {
rewrite ^/blog/(.*) /posts/$1 permanent;
}
# 403禁止访问
location /admin {
deny all;
return 403;
}
}
}
关键流程详解
- 连接建立
- 客户端访问
http://example.com/static/image.jpg
,Worker进程通过listen 80
接收连接。
- Host匹配
Host: example.com
匹配到对应的server
块。
- Location匹配
- URI
/static/image.jpg
匹配location /static/
,使用alias
映射到文件路径/data/static/image.jpg
。
- 访问静态文件
- Nginx读取文件并设置
Cache-Control
头部(expires 7d
)。
- 返回响应
- 发送HTTP 200响应,内容类型由
mime.types
决定(如image/jpeg
)。
反向代理示例流程
- 请求到达
- 客户端访问
http://example.com/api/user
。
- Location匹配
- URI匹配
location /api/
,触发proxy_pass
到upstream backend
。
- 负载均衡
- 请求被转发到
10.0.0.1:8080
或10.0.0.2:8080
(轮询策略)。
- 后端处理
- 应用服务器返回JSON数据,Nginx将其返回客户端。
流程图解
客户端请求
│
▼
Nginx Worker接收连接
│
▼
解析HTTP头 → 匹配Server块 → 匹配Location块
│ │
▼ ▼
静态文件读取 或 反向代理转发 → 生成响应 → 记录日志
高级特性
- SSL/TLS:通过
listen 443 ssl
启用HTTPS。 - 缓存:
proxy_cache
缓存后端响应。 - 限流:
limit_req
限制请求速率。
热门推荐
传统ERP软件如何SaaS化
甲母痣怎样确定为良性?专业医生为你解答
党参适合在什么地方种植?(探讨党参种植的最佳环境和技术)
质权的概念和特征是什么,权利质权的成立和对抗要件有哪些
人机协作AI提升在线心理健康支持的同理心对话
胆管癌:症状、成因、诊断与治疗全解析
全球仅剩一枚“核弹之王”,威力比原子弹大3800倍
跑步,这些疾病的"解药"
如何编写一份优秀的SOP?
医务人员医德考评的指标体系如何构建?
羊奶粉能不能治好高血压
【艺术】传统中创新 当代甲骨文篆刻
福建到惠州疫情最新规定,出行指南与安全措施
早上唾液有血不是牙龈出血
永宁寻味记:三家宝藏店铺里的地道美食
离职证明要怎么写才能领失业金
自制快速美食之如何自己在家做寿司
医院感染的学科交叉与合作
探索新编唐建军乒乓球教学的创新之路
戊土走各个大运详解,命理分析与预测
家庭常见美食:土豆炖牛肉的成功秘诀揭秘
大学食堂如何制定有效的价格策略?
Ms. 的完整含义及用法,你知道吗?
优化华硕笔记本电脑节能设置:延长电池续航与提升效率!
放假提醒:下周上班时间有变!
天水市甘谷县古坡草原:生态旅游与乡村振兴的绿色引擎
报效祖国 建功西部|向“新”发力 向“绿”跃升
SCI论文摘要字数太多怎么办?一文详解精简技巧
车门关不严怎么调整
汽车车锁无法打开该如何解决?这种情况有哪些可能的原因?