一、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:443(HTTPS 默认端口)建立 TCP 连接。TLS 握手(如果是 HTTPS):进行 SSL/TLS 加密握手,协商加密套件并交换证书。
发送 HTTP 请求:构造并发送 HTTP 请求报文,例如:
text
GET /api/user HTTP/1.1 Host: example.com User-Agent: ...
第 2 步:Nginx 接收请求
Nginx 监听在服务器的 80(HTTP)和 443(HTTPS)端口。接收到请求后,首先通过
server_name指令匹配虚拟主机(即应该由哪个server块处理)。如果配置了 HTTPS,Nginx 会完成SSL/TLS 终止:解密请求,将加密的流量转为明文 HTTP 请求,以便后续处理。这一步也减轻了后端服务的负担。
第 3 步:Nginx 处理请求(核心决策)
Nginx 在server块内部根据location指令匹配请求的 URI,决定如何处理。常见的几种情况:
情况 A:直接返回静态文件
如果请求的是图片、CSS、JS 等静态资源,Nginx 会直接从配置的root目录中读取文件并返回。例如:
nginx
location /static/ { root /var/www/html; }此时请求不会转发给后端。
情况 B:反向代理到后端服务器(最常见)
如果请求是动态内容(如/api/user),Nginx 会通过proxy_pass将请求转发给一个或多个后端服务器。例如:
nginx
location /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_cache,Nginx 可能会把响应缓存起来,下次相同请求可以直接返回。压缩:开启 gzip 压缩后,对响应体进行压缩。
修改响应头:比如添加
Cache-Control。
最后,Nginx 通过之前与浏览器建立的 TCP 连接,将响应(若是 HTTPS 则先加密)发送回浏览器。
第 6 步:浏览器渲染页面
浏览器收到响应后,解析 HTML、下载依赖资源(这些资源又会发起新的请求,重复以上流程),最终呈现给用户。