nginx简介

Published on in 程序人生 with 0 views and 0 comments

1、简介

nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

2、正向代理和反向代理

  • **正向代理:**对服务端来说,只知道代理服务器访问它,不知道具体的客户端信息,此时客户端和代理在同一局域网下
  • **反向代理:**对客户端来说,只知道访问代理服务器,不知道具体访问了那些服务端,此时服务端和代理在同一个局域网下

image.png

image.png

3、常用命令

  • nginx -s stop 不管当前有没有请求在处理,直接停止
  • nginx -s quit 完成正在处理的请求再停止
  • nginx -s reload 重新加载(修改了配置文件后执行此命令)

4、动静分离

使用nginx可以实现动态资源和静态资源的分离

#拦截后台请求
location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
}

#拦截静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
    root /opt/static;
}

5、负载均衡

nginx的负载均衡算法主要有轮询,ip_hash,权重,随机等算法,通过upstream模块来实现。

upstream定义了一组服务,服务可以监听不同的端口,并且服务可以是TCP服务或unix域套接字(UNIX-domain sockets)。

下面是官方给的一个定义示例:

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com  backup;
}

nginx默认使用了轮询算法实现负载均衡,这里发送请求,较多的请求会落在第一个服务上,少部分请求会落在第二个或者第三个服务上,第四个服务用backup标识,如果前面三个服务都异常,则会去请求第四个服务。

5.1、server的参数

示例中server后面跟了一些参数除了示例中出现的,server后面还可以添加其他参数,常用的几个参数定义如下:

  • **weight=number,**给服务分配权重,number默认为1;
  • **max_conns=number,**标明服务的最大连接数,默认是0,即不限制;
  • max_fails=number,fail_timeout=number,这两个参数需要结合使用,fail_timeout定义了一个时间周期,max_fails表示在这个时间周期内允许的最大失败连接数,如果在这个时间周期内失败的连接数超过max_fails设置的值,那么在这个时间周期内就不回去请求这个服务,max_fails默认1,timeout默认10;
  • **backup,**标识这是一个备用服务,其他服务不可用就调用这个服务;
  • **down,**标识服务永远不可用;
  • ......

5.2、hash

nginx内置了基于ketama一致性算法的负载均衡方法,该方法基于Memcached缓存实现,如果新增或者删除一个服务,会导致大部分缓存失效然后重新映射。常用的url_hash只需要把hash的值设为请求的url即可,示例如下**。**

 upstream urlhash {
    hash $request_uri;
     server 127.0.0.1:8080;
     server 127.0.0.1:8081;
     server 127.0.0.1:8082;
 }

5.3、ip_hash

ip_hash策略将客户端的IP作为hash算法的关键字来进行请求的分配,确保从同一个客户端发来的请求,会被分配到同一个服务上,除非服务不可用了,如果要删除一个服务,不能直接删除,用down标识,如果直接删除,那么就会重新对ip进行hash操作,之前的请求就不一定能落在原来的服务上。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

5.4、加权轮询

通过weight=number实现

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com weight=3;
    server backend3.example.com weight=2;
}

标题:nginx简介
作者:wenyl
地址:http://www.wenyoulong.com/articles/2022/02/25/1645779545928.html