Nginx 反向代理和负载均衡

代理服务

没有代理服务就是客户端与服务器直接通信
在这里插入图片描述
但随着并发数增多我们的Server就吃不消了
在这里插入图片描述
此时我们可以引入一个代理服务器(Proxy Server)来转发至多个服务器
在这里插入图片描述
代理服务有两种方式,一种是
正向代理
,一种是反向代理

正向代理

正向代理就是我们想访问Internet中的资源,可以通过一个中间服务器去转发。这就是正向代理。而对于只能访问局域网的客户端,也是可以使用正向代理访问外网的。
在这里插入图片描述
正向代理的优势是对于客户端的,因为对于目标服务器,客户端的IP是隐藏的。目标服务器只能获取代理服务器的IP。而且正向代理可以起缓冲和加速的作用。

正向代理还有一大用途,就是通过代理服务器,可以突破自身ip访问限制,访问国外网站。也就是我们常说的翻墙。

反向代理

反向代理是指用代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端。对于客户端来说,反向代理就相当于目标服务器。
在这里插入图片描述
反向代理对于服务器有优势。它可以隐藏服务器的真实IP

反向代理可以为后端的多台服务器提供负载均衡。可以为较慢服务器提供缓冲,提高访问速度。

反向代理还可以提供安全保障,它可以作为应用层防火墙,为网站提供对基于Web的攻击行为的防护,比如DDoS。还可以为后端服务器统一提供加密和SSL加速,提供HTTP访问认证等。

Nginx反代Nodejs服务

我们创建一个简单的server.js用作服务器,将其部署到3000端口上

const http = require("http");
 
const server = http.createServer(function (require, respose) {
  console.log("Client request data...");
  respose.end("success");
});
 
server.listen(3000, function () {
  console.log("Successfully start server on (port:3000)");
});

然后在nginx.conf中,将根目录反代到本地3000端口上

	location / {
		proxy_pass http://localhost:3000;
	}

将nginx监听端口设为80

server {
    listen       80;
    server_name  localhost;
    ...
}

运行nginx,打开https://localhost:80如果是下面那样就成功了
在这里插入图片描述

负载均衡

设置两台node服务器,然后分别在80808081上监听

const http = require("http");
 
const server = http.createServer(function (require, respose) {
  console.log("Client request data...");
  respose.end("I'm server on port:8080");
});
 
server.listen(8080, function () {
  console.log("Successfully start server on (port:8080)");
});
const http = require("http");
 
const server = http.createServer(function (require, respose) {
  console.log("Client request data...");
  respose.end("I'm server on port:8081");
});
 
server.listen(8081, function () {
  console.log("Successfully start server on (port:8081)");
});

将反代地址改为改为http://myserver,然后添加负载均衡配置

	upstream myserver{
		server localhost:8080;
		server localhost:8081;
	} 

然后reload nginx,同时打开两个http://localhost
在这里插入图片描述
如果打开多了就会发现,他们是交替进行的。也就是说nginx是根据这个列表轮询的。

分配服务器策略

轮询

刚才的例子就是轮询,也是默认情况。

weight (权重)

按照设置的权重分配,权重越大分配越多。

	upstream myserver{
		server localhost:8080 weight=1;
		server localhost:8081 weight=2;
	}

可以看到,分配是按1次8080,2次8081循环的。
在这里插入图片描述

ip_hash

根据每个访客IP 的哈希值 分配,这样如果访客IP不变就固定访问一个服务器。

	upstream myserver{
		ip_hash;
		server localhost:8080;
		server localhost:8081;
	} 

在这里插入图片描述

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

	upstream myserver{
		server localhost:8080;
		server localhost:8081;
		fair;
	} 

least_conn

最少连接方式,哪个服务器当前处理的连接少, 请求优先转发到这台服务器

	upstream myserver{
		least_conn;
		server localhost:8080;
		server localhost:8081;
	} 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orbitgw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值