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限制请求速率。
热门推荐
王昭君的爱情传奇:和亲背后的悲欢离合
公认肉质绝佳的三种鱼,刺少肉质鲜美且营养丰富,每一口都是享受
新能源汽车现状与未来发展趋势
关于圣地亚哥巴尔博亚公园您不知道的 10 件事
关于圣地亚哥巴尔博亚公园您不知道的 10 件事
元宵佳节将至,元宵、汤圆热销市场旺
怎么制作山楂片
强军精神:军人坚守的秘密
澳洲杉的养殖与养护(澳洲杉的生长特点及关键养护要点)
澳洲杉喜阳还是喜阴?剖析澳洲杉的生长环境
澳洲杉用什么土最好 适合什么土壤养殖
苗家酸汤鱼:一锅酸辣里的千年传承
苗家酸汤鱼和腊肉,谁才是贵州美食之王?
跟着丹丹游西江千户苗寨,打卡苗族美食
Sn码是一物一码吗?Sn码与一物一码的区别与联系
猫咪吃炸鱼块真的OK吗?
苯甲酸钠对人体的危害
寒假热门旅游目的地大揭秘:哈尔滨、雪乡、长白山、三亚、厦门、西双版纳
寒假心理调适指南:专家教你保持好心情
寒假社会实践指南:社区服务、科技馆探秘、民俗调研
更年期怎么缓解症状
新藏线G219自驾游,最美秋季路线推荐
219国道新藏线自驾游:珠峰羊卓雍措必打卡,狂野之路等你挑战
2025待播剧,肖战杨洋王鹤棣谁能引爆荧屏?
2025年必追甜宠剧:《陷入我们的热恋》《樱桃琥珀》《许我耀眼》
2025年最受期待剧集大盘点:国产剧与海外剧谁将称霸荧屏?
绍兴至天津自驾游最新交规攻略
绍兴到天津高铁攻略:最快仅需5.5小时!
绍兴安昌古镇:江南水乡第一镇,天津游客必打卡
美剧中“you guys”的正确打开方式