
一、Nginx代理服务器的作用Nginx代理服务器主要是为了给网站或应用系统引入一位高效的“交通指挥官”负载均衡将用户请求均匀地分发到多台后端服务器上、“安全屏障”隐藏真实后端服务器暴露自身IP和“性能加速器”缓存加速专门处理耗时的SSL/TLS加密解密工作来解决因用户量增长而带来的一系列技术挑战。二、Nginx对比Spring Cloud Gateway值得注意的是Nginx偏向边缘网关与Spring Cloud Gateway偏向内部网关通常不是替代关系而是分层协作。Nginx负责处理南北向流量客户端到数据中心承担外围的基础安全防护与性能优化而Spring Cloud Gateway则管理东西向流量微服务之间处理业务相关的逻辑。三、一次请求从浏览器发起的是怎么通过Nginx传递的浏览器 (客户端) │ │ ① HTTP/HTTPS 请求 ▼ [ Nginx 代理服务器 ] │ ② 选择具体后端server块服务然后根据请求的 URl 选择最合适的 location块 │ ③ 可能负载均衡、修改请求头 ▼ [ 后端服务器 1 ] 或 [ 后端服务器 2 ] (应用 数据库) │ ④ 生成响应 ▼ [ Nginx 代理服务器 ] ← ⑤ 可能缓存、压缩 │ ⑥ 响应加密或不加密 ▼ 浏览器第 1 步浏览器发起请求用户在浏览器地址栏输入https://example.com并回车。浏览器会做这些事情DNS 解析将域名example.com解析成 Nginx 服务器所在机器的公网 IP假设为203.0.113.10。建立 TCP 连接与203.0.113.10:443HTTPS 默认端口建立 TCP 连接。TLS 握手如果是 HTTPS进行 SSL/TLS 加密握手协商加密套件并交换证书。发送 HTTP 请求构造并发送 HTTP 请求报文例如textGET /api/user HTTP/1.1 Host: example.com User-Agent: ...第 2 步Nginx 接收请求Nginx 监听在服务器的 80HTTP和 443HTTPS端口。接收到请求后首先通过server_name指令匹配虚拟主机即应该由哪个server块处理。如果配置了 HTTPSNginx 会完成SSL/TLS 终止解密请求将加密的流量转为明文 HTTP 请求以便后续处理。这一步也减轻了后端服务的负担。第 3 步Nginx 处理请求核心决策Nginx 在server块内部根据location指令匹配请求的 URI决定如何处理。常见的几种情况情况 A直接返回静态文件如果请求的是图片、CSS、JS 等静态资源Nginx 会直接从配置的root目录中读取文件并返回。例如nginxlocation /static/ { root /var/www/html; }此时请求不会转发给后端。情况 B反向代理到后端服务器最常见如果请求是动态内容如/api/userNginx 会通过proxy_pass将请求转发给一个或多个后端服务器。例如nginxlocation /api/ { proxy_pass http://backend_servers; }负载均衡如果定义了upstream组多个后端地址Nginx 会按照轮询、最少连接、IP hash 等算法选择一个后端。修改请求头Nginx 会添加或修改一些头部如X-Real-IP、X-Forwarded-For以便后端知道客户端的真实 IP。建立新连接Nginx 与选中的后端服务器如192.168.1.100:8080建立 TCP 连接并将原始请求URI、请求体、头部等转发过去。第 4 步后端服务器处理并返回响应后端应用程序例如 Spring Boot、Express、Django收到来自 Nginx 的请求执行业务逻辑查询数据库、计算等。生成 HTTP 响应包含状态码、响应头和响应体原路返回给 Nginx。第 5 步Nginx 接收后端响应并转发给浏览器Nginx 收到后端响应后可以根据需要再做一些处理响应缓存如果配置了proxy_cacheNginx 可能会把响应缓存起来下次相同请求可以直接返回。压缩开启 gzip 压缩后对响应体进行压缩。修改响应头比如添加Cache-Control。最后Nginx 通过之前与浏览器建立的 TCP 连接将响应若是 HTTPS 则先加密发送回浏览器。第 6 步浏览器渲染页面浏览器收到响应后解析 HTML、下载依赖资源这些资源又会发起新的请求重复以上流程最终呈现给用户。