nginx反向代理和负载均衡
一、反向代理
nginx 反向代理,就是将前端发送的动态请求由 nginx 转发到后端服务器。
1.1反向代理的好处:
-
提高访问速度
因为nginx本身可以进行缓存,如果访问的同一接口,并且做了数据缓存,nginx就直接可把数据返回,不需要真正地访问服务端,从而提高访问速度。
-
进行负载均衡
所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。
-
保证后端服务安全。
因为一般后台服务地址不会暴露,所以使用浏览器不能直接访问,可以把nginx作为请求访问的入口,请求到达nginx后转发到具体的服务中,从而保证后端服务的安全。
1.2nginx反向代理详解
server{
listen 88;
server_name localhost;
location /app/{
proxy_pass http://localhost:8080/admin/; #反向代理
}
}
proxy_pass:该指令是用来设置代理服务器的地址,可以是主机名称,IP地址加端口号等形式。
如上代码的含义是:监听88端口号, 然后当我们访问 http://localhost:88/app/../..这样的接口的时候,它会通过 location /api/ {} 这样的反向代理到 http://localhost:8080/admin/上来。
例如:当在访问http://localhost/app/employee/login,nginx接收到请求后转到http://localhost:8080/admin/,故最终的请求地址为http://localhost:8080/admin/employee/login,和后台服务的访问地址一致。简单来说就是将/app/后的地址拼接到要反向代理的地址后面,形成最终的访问地址。
二、负载均衡
当如果服务以集群的方式进行部署时,那nginx在转发请求到服务器时就需要做相应的负载均衡。其实,负载均衡从本质上来说也是基于反向代理来实现的,最终都是转发请求。
2.1nginx 负载均衡的配置方式:
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;#负载均衡
}
}
upstram:如果代理服务器是一组服务器的话,可以使用upstream来配置后端服务器组
该段代码的含义是:监听80端口,当访问http://localhost:80/api/../..这样的端口时,会通过location /apo/反向代理到http://webservers/admin,根据webservers找到一组服务器,再根据配置的负载均衡策略转发到具体的服务器。
2.2nginx负载均衡策略:
轮询 | 默认方式 |
weight | 权重方式,默认为1 |
ip_hash | 根据ip分配,这样每个访客固定访问一个后端服务 |
least_conn | 依据链接最少方式,优先分配给链接最少的服务器 |
url_hash | 相同的url分配到同一个服务器 |
fair | 响应时间短的服务器优先分配 |
2.3具体的配置方式
轮询:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
weight:
upstream webservers{
server 192.168.100.128:8080 weight=90;
server 192.168.100.129:8080 weight=10;
}
ip_hash:
upstream webservers{
ip_hash;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
least_conn:
upstream webservers{
least_conn;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
url_hash:
upstream webservers{
hash &request_uri;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
fair:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
fair;
}