Nginx反向代理和负载均衡概念
1. Nginx反向代理
1.1 什么是Nginx反向代理?
nginx反向代理,指的便是将前端发送的动态请求由nginx转发给后端服务器。
1.2 使用Nginx反向代理的好处是什么?
使用nginx反向代理的好处:
- 提高访问速度
因为nginx本身可以进行缓存,如果多次访问同一接口并做了数据缓存,nginx就可以直接将数据返回,而不需要访问服务器端,从而提高访问速度。 - 进行负载均衡
nginx可以把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而避免某台服务器同时接收大量的请求而崩溃。 - 保证后端服务器安全
因为后端服务器地址一般不会对外暴露,所以浏览器不能直接访问,而是把nginx作为请求访问的入口,然后将请求在转发给具体的服务器,从而保证后端服务器的安全。
1.3 Nginx反向代理的配置方式?
server{
listen 80;
server_name localhost;
location /api/{
proxy_pass http://localhost:8080/admin/; #反向代理
}
}
proxy_pass:该指令是用来设置代理服务器的地址,可以是主机名称,IP地址加端口号等形式。
上述代码的含义是:监听80端口号,当访问http://localhost:80/api/…/这样的接口时,通过 location /api/ {} 反向代理到http://localhost:8080/admin/
2. Nginx负载均衡
2.1 什么是Nginx负载均衡?
负载均衡:
nginx可以把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而避免某台服务器同时接收大量的请求而崩溃,从本质上来说,负载均衡也是基于反向代理来实现的,最终都是转发请求。
2.2 Nginx负载均衡的配置方式?
nginx负载均衡配置方式:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
server{
listen 80;
server_name localhost;
location /api/{
proxy_pass http://webservers/admin;#负载均衡
}
}
upstream:如果代理服务器是一组服务器的话,我们可以使用upstream指令配置后端服务器组。
上述代码含义:监听80端口号, 当访问 http://localhost:80/api/…/…这样的接口的时候,它会通过 location /api/ {} 反向代理到 http://webservers/admin,根据webservers名称找到一组服务器,根据设置的负载均衡策略(默认是轮询)转发到具体的服务器。
注意:upstream后面的名称可自定义,但要上下保持一致。
2.3 Nginx负载均衡策略有哪些?
nginx负载均衡策略:
名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
url_hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
具体配置方式:
1. 轮询:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
2. weight:
upstream webservers{
server 192.168.100.128:8080 weight=90;
server 192.168.100.129:8080 weight=10;
}
3. ip_hash
upstream webservers{
ip_hash;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
4. least_conn:
upstream webservers{
least_conn;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
5. url_hash:
upstream webservers{
hash &request_uri;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
6. fair:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
fair;
}