Nginx反向代理原理详解(图文全面总结)

大家好,我是mikechen。

Nginx反向代理大型网站必备的,也是大厂经常考察的,下面我就全面来详解Nginx反向代理原理@mikechen

本文作者:mikechen

文章来源:mikechen.cc

正向代理

如果要搞透Nginx反向代理,你有必要先搞懂正向代理,理解清楚了正向代理,更容易理解反向代理。

正向代理:就是客户端将请求发送给正向代理服务器,代理服务器再将请求转发给目标服务器,获取响应后返回给客户端。

举一个例子:正向代理,就像你雇佣了一个中间人去帮你取东西。

比如:你要访问(google.com),我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。

如下图所示:

这个过程中,Google 服务器认为是“代理服务器”在访问它,而并不知道背后的真实访问者是你。

换句话说,正向代理屏蔽了真实客户端的信息,它充当客户端和目标服务器之间的“中间人”。


反向代理

搞清楚了“正向代理”后,下面我再来谈谈反向代理。

反向代理(Reverse Proxy),同样是一个位于客户端、和目标服务器之间的中间服务器。

反向代理作用对象和服务目标,与正向代理相反。

正向代理,是为了客户端能够访问到它想访问的服务器,隐藏的是客户端自身。

反向代理是为了保护和优化后端服务器,隐藏的是后端服务器的真实信息。

如下图所示:

客户端向反向代理服务器发送请求,反向代理服务器根据配置将请求转发给后端的真实服务器,并将后端服务器的响应返回给客户端。

客户端不知道后端真实服务器的存在,只与反向代理服务器交互。

采用了反向代理,有啥好处呢?

包含:

  • 增强安全性:
  • 隐藏后端服务器真实 IP 和拓扑,抵御恶意攻击。
  • 实现负载均衡:
  • 将请求分发到多台后端服务器,提高系统可用性和性能。
  • 提供缓存加速:
  • 缓存静态内容,减轻后端服务器压力,提升响应速度。
  • 统一访问入口:
  • 将多个后端服务通过单一域名和端口暴露,简化用户访问。


Nginx反向代理

Nginx 工作在网络的“入口”层,它会根据配置规则来决定如何转发请求。

基本流程如下:

  1. 客户端发起请求到 Nginx;
  2. Nginx 根据请求路径、域名等进行匹配;
  3. 将请求转发到后端真实服务器(upstream)。
  4. 获取响应后返回给客户端。

以下是一个基本的反向代理配置示例:

http {    upstream backend_servers {        server 127.0.0.1:8081;        server 127.0.0.1:8082;        server 127.0.0.1:8083;    }     server {        listen 80;        server_name mikechen.cc;         location / {            proxy_pass http://backend_servers;             # 保留客户端真实 IP 信息            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header X-Forwarded-Proto $scheme;             # 优化连接            proxy_http_version 1.1;            proxy_set_header Connection "";             # 设置超时时间            proxy_connect_timeout 10;            proxy_read_timeout 30;        }    }}


前端访问 mikechen.cc,请求交由 Nginx 分发给三台 Java 服务实例。

真实客户端 IP 被保留,可用于日志、权限控制等。

以上

本篇已经收纳于mikechen创作的《阿里架构师进阶专题合集》里面。

相关文章

部署Nginx-一个ip,多个域名,部署多个项目

一、背景无论是在centos、ubuntu、iis等云服务器,还是在个人的电脑上,当部署Nginx时,基本上都会遇到想用一台服务器(只有一个IP)映射到多个域名上,以供访问多个不同的前端项目的情况(这...

在 Nginx 中防止 SSL 证书被其他域名“窜用”

在 Nginx 中防止 SSL 证书被其他域名“窜用”(即防止未经授权的域名使用你的 SSL 证书),需要确保你的服务器配置只允许合法域名访问,并通过适当的配置阻止非法域名的 HTTPS 请求。一般情...

搭建nginx反向代理用作内网域名转发

情景由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端...

要将端口5002和5003通过Nginx代理到一个域名上的操作笔记

要将端口5002和5003通过Nginx代理到域名www.4rvi.cn的不同路径下,请按照以下步骤配置Nginx:步骤说明创建或编辑Nginx配置文件通常配置文件位于/etc/nginx/sites...

Nginx域名配置

对于想搭建自己博客或者其他个人网站的小伙伴,可能会需要配置域名。在我们购买完服务器,代码敲完,项目搞定,怎么使用域名访问呢?首先购买域名(要有DNS解析)-> 然后域名备案与审核 -> 最...

使用nginx配置动态域名解析

使用nginx配置来达到动态域名解析,resolver指令设置解析器的地址using-nginx-map-directive-to-dynamically-set-proxy-upstream要使用...