Nginx 的反向代理与负载均衡

3 篇文章 0 订阅

1. 什么是反向代理和负载均衡;

  • 反向代理
    • 有时候用自己的计算机 A 想访问国外的某个网站 B,但是访问不了。此时有一台中间服务器 C 可以访问国外的网站 B的话,我们可以用自己的电脑访问服务器 C,通过 C 来访问 B 这个网站。那么这个时候,服务器 C 称为代理服务器,因为它代理我们访问网站 B。这种访问方式叫做正向代理。正向代理有一个特点,就是我们明确知道要访问哪个网站。
    • 再如,当我们有一个服务器集群,并且服务器集群中的每一台服务器内容一样的时候,同样我们要直接从个人电脑访问到服务器集群服务器的时候无法访问。此时有台第三方服务器能访问集群。这个时候,我们通过第三方服务器访问服务器集群的内容,但是此时我们并不知道是哪一台服务器提供的内容,此时的代理方式叫做反向代理。反向代理的特点是,我们不知道真实访问的服务器是哪个。
  • 负载均衡
    • 当一台服务器的单位时间内的访问量越大的时候,服务器的压力会很大。当一台服务器压力大得超过自身的承受能力的时候,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,通常通过负载均衡的方式来分担服务器压力。
    • 什么是负载均衡?建立很多个服务器,这些服务器组成一个服务器集群。然后当用户访问网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该选择的服务器。这样,每次的用户访问,都会保证服务器集群中的每个服务器的压力趋于平衡,分担了服务器的压力,避免了服务器崩溃的情况。
    • 负载均衡的原理是通过反向代理来实现的。

2. Nginx 负载均衡的实现;

  • Nginx 是一款可以通过反向代理实现负载均衡的服务器。使用 Nginx 服务器实现负载均衡的时候,用户首先会访问到 Nginx 服务器,然后 Nginx 服务器作为中间设备、再从服务器集群表中选择压力较小的服务器,然后将该访问请求指向该服务器。若服务器集群中的某个服务器崩溃,那么从待选服务器列表中将该服务器删除。
# 进入 Nginx 配置文件夹
cd /usr/local/nginx/conf/
# 新建负载均衡的配置文件
vim fzjh.conf
# 写入如下内容
user nobody;

worker_processes 4;	# 负载均衡可以多开点进程数

events {
	 worker_connections  1024;	# 最大并发数
}

# 实现负载均衡核心代码
http{
	upstream myproject {	# 设置负载均衡服务器列表(可以是内网 ip,也可以是 外网 ip)
		server 182.61.200.7;	# baidu
		server 124.200.55.1;	# localhost
		server 42.120.158.5;	# 404
		server 106.11.62.15;	# taobao
		server 192.168.1.214:80;	# 内网测试网站1
		server 192.168.1.215:80;	# 内网测试网站2
	}
	
	server {	
		listen 8080;	# 监听端口
		location / {	# 根目录做负载均衡
			proxy_pass http://myproject;	# 做负载均衡的服务器列表
		}
	}
}

# 保存退出,设置防火墙
firewall-cmd --zone=public --add-port=8080/tcp --permanent		// 添加 8080 端口
firewall-cmd --reload	// 重启

# 重新加载 Nginx
pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

3. HTTP Upstream 模块。

  • HTTP Upstream 模块

    • Upstream 模块是 Nginx 服务器的一个重要模块。Upstream 模块主要是实现轮询算法的。这个轮询是指轮询客户端 ip 和后端 ip 之间的负载均衡。
    • 客户端 ip 申请后端 ip 的时候,如果是实现负载均衡的话,那么后端 ip 会从服务器列表中选择一个 ip 地址。这个时候客户端 ip 和与后端 ip 之间就要实现一个负载均衡。那是怎么选择后端服务器?通常会通过轮询的方式实现:从后端的服务器 ip 列表中从上到下一直去选取,那样就会先选后端实现负载均衡的这些 ip 地址中的第一个服务器 ip,再选第二个 ip,第三个 ip,依次轮着下去到最后一个之后再跳到第一个,依次循环的轮询。这样的一种负载均衡的算法叫做轮询算法。
    • 常用的指令有 ip_hash、server 和upstream
  • ip_hash 指令

    • 在负载均衡系统中,加入用户在某台服务器上登录,该用户第二次请求的时候,因为服务器是负载均衡系统,每次请求都会重新定位到服务器集群中的一台服务器。如果将已经登录服务器 A 的用户再定位到其他服务器,那么用户在服务器 A 上的登录信息将丢失,那是不妥的。
    • 将不同的用户引入不同的服务器。将同一个用户的请求引入同样的服务器。
    • 所以可以用 ip_hash 指令解决这个问题。如果客户端请求已经访问了服务器 A 并登录,那么第二次请求的时候,会将该请求通过哈希算法自动定位到该后端服务器中。
# 进入 Nginx 配置文件夹
cd /usr/local/nginx/conf/
# 修改配置文件
vim fzjh.conf
# http{} 里的 upstream{} 模块写入
ip_hash;

# 重新加载 Nginx
pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

  • server 指令
    • 主要用户指定服务器的名称和参数和不同的服务器的权重
# 进入 Nginx 配置文件夹
cd /usr/local/nginx/conf/
# 修改配置文件
vim fzjh.conf
# 去掉 ip_hash
#ip_hash;
# http{} 里的 upstream{} 模块设置 server 权重,设置 weight (默认为 1)
upstream myproject { 
     #ip_hash;
     server 192.168.1.214:80; weight=2;
     server 192.168.1.215:80;
}

# 重新加载 Nginx
pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

  • upstream 指令以及相关变量
    • 主要是用于设置一组可以再 proxy_pass 和 fastcgi_pass 指令中使用代理服务器,默认负载均衡方式为轮询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值