Nginx反向代理和负载均衡2021-10-21

认识部分nginx.conf

  1. 文件结构

    打开nginx.conf(nginx我用的openresty,集成了一些插件,省大把时间),吧注释的说明都去掉,留下一个整洁的模板,长这样:

     worker_processes  1;
     
     events {
       worker_connections  1024;
     }
     http {
       include       mime.types;
       default_type  application/octet-stream;
    
       sendfile        on;
       keepalive_timeout  65;
       server {
         listen       80;
         server_name  localhost;
         location / {
           root html;
           index index.html;
         }
       }
     }
    文件分成三块
    1. 全局配置模块

      影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等,worker_processes表示处理并发数,越大处理的越多,不过和硬件等有关

    2. events配置模块

      主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。上述表示最大的连接数为1024

    3. http配置模块(http模块里又分为http全局块和server模块这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

      1. 全局模块

        http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

      2. server模块(可以有多个,分为server/location模块)

        全局块location
        最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置这块的主要作用是基于 Nginx 服务器接收到的请求字符串、对虚拟主机名称(也可以是IP别名)之外的字符串(例如 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

      看上去像这样:

      2I2W2x

  2. 部分常用字段和功能

    该文件是nginx到配置文件

    字段功能
    worker_processes指明nginx要开启的进程数
    worker_connections单个工作进程可以允许同时建立外部连接的数量
    defult_type响应类型:有application/octet-stream(下载)和application/text/html(网页 )
    include配置多的时候会分成多个文件,可以用此指令汇总
    sendfile提高文件的传输速率,开启后会用sendFile()
    keepalive_timeout规定http请求keep-alive持续的时间,不要太大,好释放资源,提高性能
    location通过指定模式来与客户端请求的URI相匹配
    server_name指明host
    listen该字段出现在server里,指明端口号
    error_page当发生错误的时候能够显示一个预定义的uri
    proxy_pass反向代理字段
    upstream负载均衡配置模块

    location 匹配规则

    有四个优先级别

    1. 「=」级别最高

       location = /a{
        echo "this is the most higt level"
       }
    2. 」^~「级别其次

       location ^~ /a {
        echo "this is the second level"
       }
    3. 「~」级别第三

       location ~ /\w {
        echo "this is the third level"
       }
    4. 「普通字符串」

       location / {
        echo "this is the final level"
       }
  3. 同优先级别的,匹配程度较高的先匹配
  4. 匹配程度一样的,则写在前面的先匹配

作为一个前端er,了解这些就够了吧,接下来就进入主菜

反向代理

开启nginx后默认是80端口,我因为端口号被占用,修改成了8080,访问localhost:8080

79n5vJ

我用node自己开了个服务,端口号为8080,访问成功:

lYdllb

反向代理我们只需要用到proxy_pass字段,像这样:

worker_processes  1;

events {
  worker_connections  1024;
}
http {
  include       mime.types;
  default_type  application/octet-stream;

  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    # 响应类型改为html
    default_type  text/html;
    location / {
      proxy_pass http://localhost:8080
    }
  }
}

VMs24m

可以看到访问默认的80端口,也会因反向代理转到8080端口


反向代理需要注意的点就是proxy_pass的路径要与location的规则一起用


负载均衡

负载均衡的职责是将网络请求,或者其他形式的负载「均摊」到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。

通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。

负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡还是比如我们接下来会讲到的ngxin

可以这么配置

worker_processes  1;

events {
  worker_connections  1024;
}
####################################
####### 在这里添加一个upstream 字段####
upstream serverGroups{
  server localhost:80;
  server localhost:8080;
  
  server localhost:8081;
}
####################################
http {
  include       mime.types;
  default_type  application/octet-stream;

  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    default_type  text/html;
    location / {
      ####################################
      # 在这里啊host替换成上面的upstream名字 #
      proxy_pass http://serverGroups
    }
  }
}

看看效果

005UbvFEgy1h98ihbv9u8g327m1bse89

自此,反向代理和负载均衡就大概是这样,我觉得作为前端er了解知道怎么弄就行,不需要去深入了解配置参数啥的