Nginx反向代理与负载均衡


本教程讲述 Nginx 的关键应用场景之反向代理负载均衡。内容接上文:Nginx常见应用场景

一、反向代理

正向代理

正向代理,通常被称为代理、代理服务器或者网络代理,是一个位于一组客户端机器前面的服务器。当这些计算机向互联网上的站点和服务发出请求时,代理服务器会拦截这些请求,然后代表这些客户端与web服务器进行通信,就像一个中间人一样。

例如,我们来命名一个典型的正向代理通信中涉及的3台计算机:

A:这是用户的家庭计算机
B:这是一个正向代理服务器
C:这是一个网站的源服务器(存储网站数据的地方)

请添加图片描述

在标准的互联网通信中,计算机A会直接与计算机C建立联系,客户端向源服务器发送请求,源服务器向客户端响应。当正向代理存在时,A将会把请求发送给B,然后B再将请求转发给C。随后,C会向B发送响应,B再将响应转发回A。

为什么有人会在他们的互联网活动中添加这个额外的中间人呢?有几个原因可能会让人想使用正向代理:

绕过国家或机构的浏览限制 - 一些政府、学校和其他组织使用防火墙,使其用户只能访问受限制的互联网版本。正向代理可用于绕过这些限制,因为它们让用户连接到代理而不是直接连接到他们访问的网站。
阻止访问某些内容 - 相反,代理也可以设置为阻止一组用户访问某些网站。例如,学校网络可能配置为通过代理连接到网络,该代理启用内容过滤规则,拒绝转发来自Facebook和其他社交媒体网站的响应。
保护他们的在线身份 - 在某些情况下,普通互联网用户只是希望提高在线匿名性,但在其他情况下,互联网用户生活在政府可以对政治异见者施加严重后果的地方。在网络论坛或社交媒体上批评政府可能导致这些用户被罚款或监禁。如果这些异见者中的一个使用正向代理连接到他们发表政治敏感评论的网站,那么用于发表评论的IP地址将更难追溯到异见者。只有代理服务器的IP地址是可见的。

反向代理

反向代理是一个位于一个或多个web服务器前面的服务器,拦截来自客户端的请求。这与正向代理不同,正向代理位于客户端前面。使用反向代理时,当客户端向网站的源服务器发送请求时,这些请求会在网络边缘被反向代理服务器拦截。然后,反向代理服务器会向源服务器发送请求并接收来自源服务器的响应。

正向代理和反向代理之间的区别微妙但重要。简化来说,正向代理位于客户端前面,确保没有源服务器与特定客户端直接通信。另一方面,反向代理位于源服务器前面,确保没有客户端与该源服务器直接通信。

再次举例说明,我们来命名涉及的计算机:

D:任意数量的用户家庭计算机
E:这是一个反向代理服务器
F:一个或多个源服务器

请添加图片描述

通常情况下,来自D的所有请求都会直接发送到F,而F会直接向D发送响应。使用反向代理时,来自D的所有请求会直接发送到E,E会将请求发送给F并接收来自F的响应。然后,E将适当的响应传递给D。

以下是反向代理的一些优点:

  • 负载均衡 - 每天有数百万用户访问的热门网站可能无法用单个源服务器处理所有传入的网站流量。相反,网站可以在不同的服务器池中进行分配,所有服务器都处理相同网站的请求。在这种情况下,反向代理可以提供负载均衡解决方案,将传入流量均匀分配到不同的服务器上,防止任何单个服务器过载。如果某个服务器完全失效,其他服务器可以接手处理流量。

  • 防止攻击 - 使用反向代理后,网站或服务不需要公开其源服务器的IP地址。这使得攻击者很难对其发起针对性攻击,例如DDoS攻击。相反,攻击者只能针对反向代理,如Cloudflare的CDN,它具有更严格的安全性和更多资源来抵御网络攻击。

  • 全球服务器负载均衡(GSLB) - 在这种负载均衡形式中,网站可以分布在全球范围内的多个服务器上,反向代理会将客户端引导到离它们最近的服务器。这减少了请求和响应需要传输的距离,缩短了加载时间。

  • 缓存 - 反向代理还可以缓存内容,从而提高性能。例如,如果巴黎的用户访问了一个在洛杉矶的web服务器上使用反向代理的网站,用户实际上可能连接到巴黎的本地反向代理服务器,然后该代理服务器需要与洛杉矶的源服务器进行通信。代理服务器可以将响应数据缓存(或暂时保存)。之后,浏览网站的巴黎用户将从巴黎的反向代理服务器获取本地缓存的版本,大大提高性能。

  • SSL加密 - 为每个客户端加密和解密SSL(或TLS)通信可能会让源服务器的计算成本变得很高。反向代理可以配置为解密所有传入请求并加密所有传出响应,从而释放源服务器上的宝贵资源。

Nginx 实现反向代理

通过 Nginx 实现反向代理相对简单。假设已经按照前面的教程安装并启动了 Nginx 服务,只需要在 Nginx 配置目录 conf.d 下新建一个 reverse_proxy.conf

server {
    listen       8001;
    server_name  localhost;

    location / {
        proxy_pass http://dummyjson.com;
        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;
    }
}

然后重新加载 Nginx 配置即可:

nginx -s reload

现在,Nginx已经配置为反向代理,发送到 http://dummyjson.com 的请求会被 localhost:8001 代理。

二、负载均衡

通过Nginx实现负载均衡也是相对简单的。假设已经按照前面的教程安装并启动了 Nginx 服务,只需要在 Nginx 配置目录 conf.d 下新建一个 load_balancer.conf

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name mydomain.com;

        location / {
            proxy_pass http://backend;
            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;
        }
    }
}

在这个配置中,您需要将backend1.example.com、backend2.example.com和backend3.example.com替换为您的后端服务器地址。将mydomain.com替换为您要代理的域名。

upstream backend部分定义了一个名为backend的负载均衡器,其中包含三个后端服务器。默认情况下,Nginx使用轮询(round-robin)算法进行负载均衡。然而,您可以通过添加least_conn或ip_hash指令来改变负载均衡算法。

例如,如果您希望使用最少连接(least_conn)算法,请将upstream backend部分更改为:

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

然后重新加载 Nginx 配置即可:

nginx -s reload

现在,Nginx已经配置为负载均衡器,并将流量在您指定的后端服务器之间进行均衡分配。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx是一款常用的Web服务器软件,也可以用作反向代理负载均衡器。反向代理是指Nginx作为一个中间服务器,接收客户端的请求并将其转发给后端的服务器处理,然后将响应返回给客户端。 负载均衡是指将客户端请求分发到多个后端服务器上,以平衡服务器的负载。Nginx通过使用不同的负载均衡算法,如轮询、IP哈希、最少连接等,来决定将请求发送给哪个后端服务器。 配置Nginx作为反向代理负载均衡器需要进行一些设置。首先,你需要在Nginx配置文件中定义后端服务器的地址和端口,并设置相应的负载均衡策略。例如: ```nginx http { upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; server_name mywebsite.com; location / { proxy_pass http://backend; } } } ``` 在上述配置中,`upstream`指令定义了后端服务器的地址,在这里我们指定了三个后端服务器。`server`块中的`location`指令指定了代理转发的路径,`proxy_pass`指令将请求转发给定义的`upstream`。 这样配置之后,当有客户端请求到达Nginx时,Nginx会根据定义的负载均衡策略将请求转发给后端服务器,并将后端服务器的响应返回给客户端。 这就是Nginx反向代理负载均衡的基本概念和配置方法。希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值