目录

  • 代理服务
  • 正向代理
  • 反向代理
  • Nginx反代Nodejs服务
  • 负载均衡
  • 分配服务器策略
  • 轮询
  • weight (权重)
  • ip_hash
  • fair
  • least_conn

代理服务

没有代理服务就是客户端与服务器直接通信

在这里插入图片描述


但随着并发数增多我们的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;
    } 
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐