1. nginx反向代理
nginx反向代理,就是前端发送的动态请求由nginx转发到后端服务器中
就是前端直接给nginx对应的服务端口,发送请求,然后代理服务的规则设置好,就可以由nginx帮你把请求转发到对应的服务器
为什么不直接通过浏览器去请求后台服务呢?而还需要nginx去做反向代理呢?
nginx反向代理的好处:
-
提高访问速度
nginx本身可以进行缓存,如果访问的同一接口,并作了数据缓存,则nginx就直接把数据返回,不需要真正的访问服务器了,从而提高了访问速度
-
进行负载均衡
可以在nginx的配置文件中,进行对服务器进行负载均衡配置,把大量请求按照我们指定的方式均衡的分配给集群中的每台服务器(默认是轮询的规则去负载均衡)
-
保证后端服务的安全
一般后台服务的地址不会暴露,所以浏览器不可以直接访问,通过请求nginx后转发到具体服务器中,可以保证后端服务的安全
nginx 反向代理的配置方式:
server{
listen 80; #监听80端口
server_name localhost; #服务器名称
location /api/{
proxy_pass http://localhost:8080/admin/; #反向代理
}
}
proxy_pass:该指令是用来设置代理服务器的地址,可以是主机名称,IP地址加端口号等形式。
监听80端口,当由请求通过80端口访问,且请求路径是 以/api/开头的请求,如:http://localhost:80/api/../..,则会被反向代理到http://localhost:8080/admin/
实战中:
server {
listen 9001;
server_name localhost;
location ~ /acl/ { # 意思是 只要请求路径中 包含/acl/的请求 就会转发到下面的服务器中
proxy_pass http://localhost:8201;
}
location ~ /sys/ {
proxy_pass http://localhost:8202;
}
location ~ /product/ {
proxy_pass http://localhost:8203;
}
location ~ /search/ {
proxy_pass http://localhost:8204;
}
location ~ /activity/ {
proxy_pass http://localhost:8205;
}
}
2. nginx负载均衡
当如果服务以集群的方式进行部署时,那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名称找到一组服务器,根据设置的负载均衡的策略(默认轮询)转发到具体的服务器。
nginx 负载均衡策略:
名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
url_hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
具体方式:
轮询:
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;
}