欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Ngnix】ngnix定义、优点、配置文件结构、功能

程序员文章站 2022-07-08 19:50:46
...

定义

​ngnix是一个高性能的Web服务器和反向代理服务器,可用于HTTP、HTTPS、POP3、SMTP、IMAP协议。它不仅可以实现负载均衡,还可以做接口限流、缓存功能。

优点(特点)

  1. 配置简单,容易上手。
  2. 跨平台:可在大多数 Unix like OS编译运行,也有Windows的移植版本。
  3. 非阻塞,高并发链接:由于使用epoll和kqueue网路I/O模型,数据复制时,磁盘I/O的第一阶段是非阻塞的,官方测试能支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
  4. master/worker工作模式:一个master进程,多个worker进程。
  5. 事件驱动:通信机制采用epoll模型,支持更大的并发连接。
  6. 内存消耗低:处理大并发的请求内存消耗非常小。在3万并发连接下,开启10个nginx 进程只消耗150M内存(15M*10=150M)。
  7. 内置健康检查功能:负载均衡中其中一个服务器宕机,会做健康检查,之后的请求不会发送到宕机的服务器上,而是提交到其他的节点上。
  8. 节省带宽:支持GZIP压缩(gzip on),可以添加浏览器缓存本地的header头,提高响应客户端的速度。
  9. 支持热部署(平滑升级):可在不打断用户请求的情况下更新版本。
  10. 异步接收用户请求:ngnix服务器将浏览器请求全部接收下来再一次性发送给后端Web服务器,减轻Web服务器压力。
  11. 稳定性高:用于反向代理,宕机的概率极低。
  12. 网络依赖性较低:只要ping通就可以负载均衡而且可以有效区分内网和外网流量。

配置文件结构

nginx.conf
【Ngnix】ngnix定义、优点、配置文件结构、功能

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

    user test		#配置用户或组                                                         
    worker_processes 10;		#允许生成进程数,默认为1
    worker_rlimit_nofile 65535;		#worker进程最大打开文件数
    daemon off;		#非守护进程
    error_log logs/error.log debug;		#日志路径,可在全局块,http块,server块,  
                                        #debug|info|notice|warn|error|crit|alert|emerg
    pid logs/nginx.pid;		#ngnix进程运行文件存放地址
    
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。

    events {
        accept_mutex on;   #设置网络连接序列化,默认为on
        multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
        use epoll;      #事件驱动模型 select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections 51200;    #最大连接数,默认为512
    }
    
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。

  • location块:配置请求的路由,以及各种页面的处理情况。

    http {
        include mime.types;    #文件扩展名与文件类型映射表
        default_type application/octet-stream;    #默认文件类型,默认为text/plain
        access_log off;    #取消服务日志    
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';    #自定义格式
        access_log log/access.log myFormat;    #combined为日志格式的默认值
        sendfile on;    #允许sendfile方式传输文件,可以在http块,server块,location块,默认为off。
        sendfile_max_chunk 100k;    #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
        keepalive_timeout 65;    #连接超时时间,可以在http,server,location块,默认为75s。
    
        upstream mysvr {   
          server 127.0.0.1:7878;
          server 192.168.10.121:3333 backup;    #热备
        }
        error_page 404 https://www.baidu.com;    #错误页
        server {
            keepalive_requests 120;    #单连接请求上限次数。
            listen       4545;    #监听端口
            server_name  127.0.0.1;    #监听地址       
            location  ~*^.+$ {    #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
               root path;    #根目录
               index vv.txt;    #设置默认页
               proxy_pass  http://mysvr;    #请求转向mysvr 定义的服务器列表
               deny 127.0.0.1;    #拒绝的ip
               allow 172.18.5.54;    #允许的ip           
            } 
        }
    }
    

功能

  1. 静态http服务器
    【Ngnix】ngnix定义、优点、配置文件结构、功能
    nginx是一个http服务器,可以将服务器上的静态文件(如HTML、图片)通过http协议展现给客户端。

    server {
        listen80; # 端口号
        location / {
            root /usr/share/nginx/html; # 静态文件路径
        }
    }
    
  2. 反向代理服务器
    【Ngnix】ngnix定义、优点、配置文件结构、功能
    客户端本来可以直接通过http协议访问某网站应用服务器,网站管理员在中间加上一个nginx服务器,客户端请求nginx,nginx请求应用服务器,然后将结果返回给客户端,此时nginx就是反向代理服务器。负载均衡、虚拟主机等,都基于反向代理实现。

    ​ (正向代理代理的是客户端,反向代理代理的是服务器)

    ​nginx在做反向代理时,提供性能稳定并且配置灵活的转发功能。可以根据不同的正则匹配,采取不同的转发策略;可对返回结果进行错误页跳转,异常判断;如果被分发服务器存在异常,可以将请求重新转发给另一台服务器并自动去除异常服务器。

  3. 负载均衡

    ​ ngnix可以通过反向代理来实现负载均衡。

    ​当网站访问量过大时,一台服务器已经无法处理请求,于是将同一应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。这时客户端发送的、ngnix反向代理服务器接收到的请求数量,就是负载量,请求数量按一定的规则分发到不同服务器的规则,就是均衡规则。所以将服务器接收到的请求按规则分发的过程,称为负载均衡。

    ​带来的好处是,一台服务器挂了,只要还有其他服务器正常运行,就不会影响用户使用。

    常见的负载均衡策略:

  • 热备:如果有两台服务器,当第一台服务器发生故障时,才使用第二台服务器。

    服务器处理请求的顺序:AAAAAAAA突然挂了BBBBBBB…

    upstream mysvr { 
          server 192.168.20.1:8080; #应用服务器A 
          server 192.168.20.2:8080 backup; #应用服务器B 热备     
    }
    
  • 轮询:将请求按顺序轮流分配到后端服务器上,不关心服务器实际的连接数和当前的系统负载。

    服务器处理请求的顺序:ABABABAB…

    upstream myapp {
        server 192.168.20.1:8080; #应用服务器A
        server 192.168.20.2:8080; #应用服务器B
    }
    
  • 加权轮询:不同的后端服务器机器配置和当前系统负载可能并不相同,因此抗压能力也不相同。给配置高、负载低的机器分配较高的权重,让其处理更多请求;而配置低、负载高的机器分配较低的权重,降低其系统负载。将请求顺序且按照权重分配到后端服务器。

    服务器处理请求的顺序:ABBCCCABBCCC…

    upstream myapp {
        server 192.168.20.1:8080 weight=1; #应用服务器A,处理1/6请求 (weight默认为1)
        server 192.168.20.2:8080 weight=2; #应用服务器B,处理1/3请求
        server 192.168.20.3:8080 weight=3; #应用服务器C,处理1/2请求
    }
    
  • 源地址哈希法(ip hash):对客户端ip地址进行哈希计算得到一个数,用该数对服务器列表大小取模,得到该客户端要访问服务器的序号。在后端服务器列表不变时,同一个客户端ip的请求将被分发到同一台服务器进行处理,有效解决session不共享的问题。

    upstream myapp {
        ip_hash; #根据客户端ip地址hash值将请求分配给固定的一个服务器处理
        server 192.168.20.1:8080;
        server 192.168.20.2:8080;
    }
    
  • 随机法:通过系统的随机算法,根据后端服务器大小随机选取一台服务器进行处理。

  • 加权随机法:与加权轮询法类似,对不同机器分配不同权重。不同的是,它按权重随机请求后端服务器而不会顺序访问。

  1. 虚拟主机

    ​ 有的网站由于访问量太小,为节省成本,将多个站点部署在同一台服务器上。

    ​ 在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。虚拟主机是通过http请求头中的host是否匹配server_name来实现的。

    server {
        listen 80 default_server;
        server_name _;
        return 444; # 过滤其他域名的请求,返回444状态码
    }
    server {
        listen 80;
        server_name a.com;
        location / {
            proxy_pass http://localhost:8080; # 对应端口号8080
        }
    }
    server {
        listen 80;
        server_name b.com; 
        location / {
            proxy_pass http://localhost:8081; # 对应端口号8081
        }
    }
    
  2. 浏览器缓存

    nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对指定的URL缓存内容进行增删管理。

参考

https://blog.csdn.net/lihang_1994/article/details/72598955

相关标签: Ngnix nginx