就目前来说nginx已经是计算机系统的必备组件了。主要的作用有静态资源代理、反向服务代理,负载均衡,虚拟主机,fastcgi等。

一.静态资源代理,将静态资源放置到nginx,静态资源直接通过nginx获取,能够降低服务端的压力,并实现前后分离。

server{
  listen: 80,
  location /{
  #这里的静态资源的关联资源建议使用相对路径
  root 静态资源的路径
  }
}

二.反向代理,用户的请求通过nginx代理访问服务器,然后将服务器的响应转发给用户端。

server {
  listen80;
  location /abc {
  proxy_pass http://192.168.20.1:8080/abc;
  }
}

三.负载均衡,在项目访问量大的情况下,服务器的响应速度就会变慢或者请求超时,所以为了避免这种情况,一般服务都是集群部署。集群部署就需要对用户的请求进行转发,而决定这里的转发策略,就是负载均衡策略。nginx主要有六种负载均衡策略,分别为:轮询、权重轮询、ip_hash、最少连接、响应时间(第三方)、url_hash(第三方)

其中相关的参数有:

fail_timeout

与max_fails结合使用,认为不可用统计时间范围。

max_fails

设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,

fail_time

服务器会被认为停机的时间长度,默认为10s,超过统计时间会重新开始计量。

backup

标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。

down

标记服务器永久停机了。


        1.轮询

nginx默认为轮询,表示对列表中服务逐个进行发送请求

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

2.权重轮询

根据权重比例进行请求路由发送

upstream dynamic_zuoyu {
     server localhost:8083   weight=1 max_fails=3 fail_timeout=20s;
     server localhost:8084  weight=2  max_fails=3 fail_timeout=20s;
   }

上述配置表示发送到8084的比例是8083的两倍,20秒之后有三次请求失败,那么就任务服务不可用,就进行剔除。超过统计期之后会重新加入进来。

3.ip_hash

是通过对请求来源的ip进行计算从而得到路由的一种方式。基于用户在访问期间ip不会变化的基本假设。但是ip_hash的问题在于如果后端服务宕机,那么用户的请求还是会被发送到那台机器。使用ip_hash的策略主要是为了解决session未做集中管理的问题。

upstream dynamic_zuoyu {
        ip_hash;  
        server localhost:8080   weight=1;
        server localhost:8083    weight=1 max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

4.least_connt

将请求发送到链接数较少的后端服务器,据此策略。后端处理的请求量大概相同。这对于响应时间较长的请求是一种解决办法。但是还是不能解决后端服务宕机的问题。

upstream dynamic_zuoyu {
       least_conn;
        server localhost:8080   weight=1;
        server localhost:8083    weight=1 max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

5.响应时间

响应时间是按照服务器的响应时间来分配请求的策略,响应时间短的优先分配

  但是该功能需要安装第三方插件相关安装过程如

upstream dynamic_zuoyu {
        fair;
        server localhost:8080   weight=1;
        server localhost:8083    weight=1 max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

6.url_hash

根据请求的url的hash结果来分配请求,是的每个url定向到同一个后端服务器。改策略主要解决同一请求的缓存问题,如果结合缓存来使用的话。会提升系统性能。

http://chenlinux.com/2010/03/02/loadbalance-in-nginx-using-url_hash/

upstream dynamic_zuoyu {
        hash $request_uri;
        server localhost:8080   weight=1;
        server localhost:8083    weight=1 max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

四、虚拟主机

nginx虚拟主机主要为了解决同一台nginx代理多个网站不同域名同一端口或者或者同一ip不同端口的问题。在配置文件中每个server表示一个虚拟主机。

server {
listen 192.168.100.102:6666;
server_name 192.168.100.102:6666;
location / {
    root   /var/www/bt;
    index  index.html index.php;
}
}


server {
    listen 192.168.100.102:8888;
    server_name 192.168.100.102:8888;
    location / {
            root   /var/www/accp;
    index  index.html index.php;
            }
    }