反向代理和负载均衡

反向代理和负载均衡

一、反向代理

nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离以及负载均衡,从而大大提高服务器的处理能力。

nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。

但是要注意,这种情况下需要保证后端跟前端的程序保持一致,可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储。

1.1 什么是代理?

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;

此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程。

1.2 正向代理

我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家肯都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们。

这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

1.3 反向代理

多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色。

反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!

1.4 正反向代理结合

在实际生产项目中,大部分的就是正向代理和反向代理结合起来使用。

我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,反向代理了多台真实的业务处理服务器。

二、负载均衡

http proxy模块,功能很多,最常用的是proxy_pass和proxy_cache

如果要使用proxy_cache,需要集成第三方的ngx_cache_purge模块,用来清除指定的URL缓存。这个集成需要在安装nginx的时候去做

nginx通过upstream模块来实现简单的负载均衡,upstream需要定义在http段内。

2.1 nginx负载均衡的模式

**1.轮询(默认):**接收到的请求安装顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

**2.ip_hash:**每个请求按照发起客户端的IP的hash结果进行匹配,这样的算法下一个固定IP地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

2.2 nginx负载均衡案例

环境说明:

主机 IP 安装 系统
nginx 192.168.100.10 nginx CentOS-7
rs1 192.168.100.20 httpd CentOS-7
rs2 192.168.100.30 httpd CentOS-7
2.2.1 rs1和rs2主机部署好网页
复制代码
 # rs1
 yum -y install httpd
 echo RS1 > /var/www/html/index.html
 systemctl restart httpd
 systemctl enable httpd
 ​
 # rs2
 yum -y install httpd
 echo RS2 > /var/www/html/index.html
 systemctl restart httpd
 systemctl enable httpd 
2.2.2 nginx配置负载均衡
复制代码
 vim /usr/local/nginx/conf/nginx.conf
 # 在http{}配置upstream
 upstream webserver {
         server 192.168.100.20;
         server 192.168.100.30;
 server {
         listen       80;
         server_name  localhost;
 ​
         location / {
                 proxy_pass http://webserver;
         }
 ​
 ​
 nginx -s reload
2.2.3 测试访问
复制代码
 curl http://192.168.100.10
2.2.4 设置权重
复制代码
 vim /usr/local/nginx/conf/nginx.conf
 # 在http{}配置upstream
 upstream webserver {
         server 192.168.100.20 weight=3;
         server 192.168.100.30;
 server {
         listen       80;
         server_name  localhost;
 ​
         location / {
                 proxy_pass http://webserver;
         }
 ​
 ​
 nginx -s reload
2.2.5 ip_hash配置
复制代码
 vim /usr/local/nginx/conf/nginx.conf
 # 在http{}配置upstream
 upstream webserver {
         ip_hash;
         server 192.168.100.20;
         server 192.168.100.30;
 server {
         listen       80;
         server_name  localhost;
 ​
         location / {
                 proxy_pass http://webserver;
         }
 ​
 ​
 nginx -s reload
2.2.6 动静分离

增加一台主机:192.168.100.200 部署tomcat,网页内容为Hello World

复制代码
 vim /usr/local/nginx/conf/nginx.conf
 # 在http{}配置upstream
 upstream webserver {        
         server 192.168.100.20;
         server 192.168.100.30;
         
  upstream tomcat {
         server 192.168.100.200:8080;
     }
         
 server {
         listen       80;
         server_name  localhost;
 ​
         location / {
                 proxy_pass http://webserver;
         }
         
         location /test {
                 proxy_pass http://tomcat;
         }
 ​
 ​
 nginx -s reload
相关推荐
杨云龙UP3 小时前
小工具大体验:rlwrap加持下的Oracle/MySQL/SQL Server命令行交互
运维·服务器·数据库·sql·mysql·oracle·sqlserver
vadvascascass4 小时前
平滑加权轮询负载均衡的底层逻辑
java·算法·负载均衡
iconball4 小时前
个人用云计算学习笔记 --18(NFS 服务器、iSCSI 服务器)
linux·运维·笔记·学习·云计算
广药门徒5 小时前
Linux驱动开发与BuildRoot是什么关系与其的应用场景
linux·运维·驱动开发
Bruce_Liuxiaowei8 小时前
MQTT协议在物联网环境中的安全风险与防范指南
运维·网络·物联网·安全·网络安全
-dzk-13 小时前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维
CS Beginner13 小时前
【Linux】 Ubuntu 开发环境极速搭建
linux·运维·ubuntu
致宏Rex14 小时前
Docker 实战教程(7) | 镜像管理和仓库操作
运维·docker·容器
wu~97016 小时前
web服务器有哪些?服务器和web服务器有什么区别
运维·服务器·前端