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

Nginx反向代理架构,是现代大型架构中的关键组成,下面我重点详解Nginx反向代理架构@mikechen

Nginx反向代理

Nginx反向代理(Reverse Proxy),它接受客户端的请求后,将请求转发给后端一个或多个服务器处理。

如下图所示:

Nginx反向代理架构详解(图文全面总结)-mikechen

与正向代理相对,反向代理隐藏了后端服务器的真实信息,客户端无需感知后端的具体实现。

Nginx反向代理不仅实现了请求的转发,还带来了负载分担、缓存优化、安全防护等多重功能。

比如:

  • 负载均衡:将用户请求智能分配给多个后端服务器,有效提升系统的并发处理能力。
  • 安全隔离:隐藏后端服务器IP,防止直接攻击,提高系统安全性。
  • 缓存加速:利用代理缓存机制,减少与后端服务器的交互次数,加快响应速度。
  • 跨域资源共享:处理多个域名请求,通过统一入口简化客户端访问流程。
  • SSL终端:代理服务器可承担HTTPS解密任务,减轻后端服务器压力。

 

Nginx反向代理架构

Nginx反向代理架构,通过在客户端和后端服务器之间建立中间层,实现请求转发、负载均衡、缓存加速和安全防护等功能。

Nginx反向代理架构,如下图所示:

Nginx反向代理架构详解(图文全面总结)-mikechen

+------------+       +------------+       +------------+
|   Client   | ----> |   Nginx    | ----> | Backend 1 |
+------------+       |(Reverse    |       +------------+
                     | Proxy & LB)|
                     +------------+
                          |   |
                          |   +------------+
                          |                |
                          +--------------> +------------+
                                           | Backend 2 |
                                           +------------+

主要包含:

客户端(Client):向服务发起HTTP/HTTPS请求。

Nginx服务器:充当反向代理和负载均衡节点,接收请求,进行转发和过滤。

后端服务器(Backend):实际处理业务逻辑和数据存储的应用服务器。

请求流程:

Nginx反向代理架构详解(图文全面总结)-mikechen

  1. 客户端发起请求:浏览器向域名(如mikechen.cc)发起HTTP/HTTPS请求。

  2. DNS解析:域名解析到Nginx服务器的公网IP地址。

  3. Nginx接收请求:Nginx作为反向代理服务器,监听80或443端口,接收客户端请求。

  4. 请求转发:根据配置,Nginx将请求转发到后端一台或多台服务器(Web服务器、应用服务器等)。

  5. 后端服务器处理请求:后端服务器处理请求并生成响应。

  6. 响应返回Nginx:后端服务器将响应返回给Nginx。

  7. Nginx响应客户端:Nginx将后端响应返回给客户端,客户端无感知后端服务器的实际地址。

下面给出一个基本的反向代理配置示例:

http {
    upstream backend_servers {
        server backend1.example.com weight=3;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name www.example.com;

        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

说明:

  • upstream定义了名为backend_servers的后端服务器池,其中backend1权重为3,表明其负载较重。
  • server模块配置监听端口及域名。
  • proxy_pass指令实现反向代理,将请求转发到负载均衡池。
  • 设置请求头保证后端正确获取客户端的真实IP和请求信息。

总之,Nginx反向代理架构是现代Web架构中常见的关键组成部分。

它位于客户端和后端服务器之间,负责接收客户端请求并转发到后端服务器,同时将后端响应返回给客户端。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法