概念
反向代理,就是将前端发送的动态请求由nginx转发到后端服务器
优势
提高访问速度
nginx 可以做缓存,如果请求了相同的地址,无需请求服务器
负载均衡
将大量的请求,均衡的分配给集群的服务器
保证后端服务的安全
后端服务部署在公司内部局域网,并不会对外开放,外部不能直接请求到后端。
请求nginx服务器 -- > 转发给后端的服务
配置反向代理
修改nginx.cnof配置
upstream heima-app-gateway{
server localhost:51601;
}
server {
listen 8801;
location / {
root C:/soteware/nginx/nginx-1.18.0/html/heima/app-web;
index index.html;
}
location ~/app/(.*) {
proxy_pass http://heima-app-gateway/$1;
proxy_set_header HOST $host; # 不改变源请求头的值
proxy_pass_request_body on; #开启获取请求体
proxy_pass_request_headers on; #开启获取请求头
proxy_set_header X-Real-IP $remote_addr; # 记录真实发出请求的客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录代理信息
}
}
servr:代表一个虚拟主机
listen:服务器监听端口
location:处理特定的一些请求,如请求路径带有app
proxy_pass: 反向代理,它的作用是指定Nginx需要代理的目标服务器的地址。当Nginx接收到客户端请求后,根据proxy_pass的值,将请求转发给指定的目标服务器,并将目标服务器的响应返回给客户端。
作用说明
这段Nginx配置定义了一个服务器监听端口8801,并配置了两个位置(location)。
第一个位置指示当访问根路径(/)时,使用C:/soteware/nginx/nginx-1.18.0/html/heima/app-web目录下的index.html文件作为默认响应。
第二个位置是一个正则表达式匹配,当访问URL路径中含有/app/的时候,会将请求转发(代理)到名为heima-app-gateway的服务器。同时,Nginx会保留原始请求头和请求体,并添加一些新的请求头,其中包括记录请求的真实IP地址和代理信息。
*在上述的location中, ~表示后面的字符串是正则表达式,在此处表示开头是”/app/“。因此,此location指令将匹配以”/app/“开头的URL。
对于正则表达式的其它两个符号:“.*”表示0或更多个任意字符,“()” 表示正则表达式中的一个分组,可以被用于匹配URL中的一部分字符串并在后续使用。*
*
因此,在此location中,“(. *)”表示匹配请求URL的任意字符,它被用作分组,可以在后续的配置中使用这个变量。
*
配置负载均衡
修改conf配置
http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 负载均衡
}
}
}
作用说明
上述配置中,upstream指令定义了一组代理服务器列表,包含了多个后端服务器的地址和权重(可选),其中后端服务器的地址可以是IP地址或者域名。权重用于指定不同服务器的请求处理分配比例,如果不指定,默认权重为1。
在server指令中,listen指令指定了监听的端口,server_name指令定义了主机名,location指令指定了代理的URL路径,通过proxy_pass指令将请求转发到upstream中的服务器,以实现负载均衡。
负载均衡策略
| 名称 | 说明 |
|---|---|
| 轮询 | 默认 |
| weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
| ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
| least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
| url_hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
| fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
配置示例
轮询和最少连接方式
http {
upstream backend {
# 轮询策略
server backend1.example.com;
server backend2.example.com;
# 最少连接策略
least_conn;
server backend3.example.com;
server backend4.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
IP散列策略
frontend http-in
bind *:80
mode http
acl host_mywebsite hdr(host) -i mywebsite.com
use_backend backend_servers if host_mywebsite
backend backend_servers
balance source
hash-type consistent
server backend1 10.0.0.1:80 check
server backend2 10.0.0.2:80 check
server backend3 10.0.0.3:80 check
以下是代码中的关键部分的解释:
frontend http-in:定义了一个前端http-in,用于监听80端口上的HTTP请求。
bind *:80:绑定前端到所有可用的IP地址和80端口。
mode http:设置前端模式为HTTP。
acl host_mywebsite hdr(host) -i mywebsite.com:定义一个访问控制列表(ACL),根据请求的host头部信息匹配mywebsite.com域名。
use_backend backend_servers if host_mywebsite:如果匹配ACL,则使用名为backend_servers的后端。
backend backend_servers:定义了一个名为backend_servers的后端,用于处理来自前端的请求。
balance source:使用源IP地址进行负载均衡。
hash-type consistent:使用一致性哈希算法实现负载均衡。
server backend1 10.0.0.1:80 check:定义一个名为backend1的服务器,并指定其IP地址和端口号为10.0.0.1:80。
server backend2 10.0.0.2:80 check:定义一个名为backend2的服务器,并指定其IP地址和端口号为10.0.0.2:80。
server backend3 10.0.0.3:80 check:定义一个名为backend3的服务器,并指定其IP地址和端口号为10.0.0.3:80。
总体来说,这段配置文件的作用是将来自mywebsite.com域名的HTTP请求通过负载均衡分发给后端服务器backend_servers。后端服务器使用源IP地址和一致性哈希算法进行负载均衡。
加权轮询和加权最少连接策略
virtual_server 192.168.1.100 80 {
persistence_timeout 50
lb_algo wlc
# 加权轮询策略
real_server 192.168.1.101 80 {
weight 10
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
}
}
real_server 192.168.1.102 80 {
weight 20
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
}
}
# 加权最少连接策略
fallback real_server 192.168.1.103 80 {
weight 5
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
}
}
}
这段代码是一个基本的LVS(Linux Virtual Server)配置文件,用于实现基于IP地址和端口的负载均衡。以下是代码中的关键部分的解释:
virtual_server 192.168.1.100 80:定义了一个名为192.168.1.100:80的虚拟服务器(Virtual Server),用于监听IP地址192.168.1.100和端口80上的TCP连接请求。
persistence_timeout 50:设置会话保持的超时时间为50秒(如果需要会话保持的话)。
lb_algo wlc:使用加权最少连接策略(Weighted Least Connection,wlc)进行负载均衡。
real_server 192.168.1.101 80:定义一个名为192.168.1.101:80的实际服务器(Real Server),用于处理来自虚拟服务器的TCP连接请求。
weight 10:将该实际服务器的权重设置为10。
TCP_CHECK:使用TCP检测方式进行健康检查,以确保该实际服务器的可用性。
real_server 192.168.1.102 80:定义一个名为192.168.1.102:80的实际服务器。
weight 20:将该实际服务器的权重设置为20。
TCP_CHECK:使用TCP检测方式进行健康检查。
fallback real_server 192.168.1.103 80:定义一个备用(Fallback)实际服务器,表示如果其他实际服务器不可用,则将流量转发给该实际服务器。
weight 5:将该实际服务器的权重设置为5。
TCP_CHECK:使用TCP检测方式进行健康检查。
总体来说,这段配置文件的作用是将来自IP地址192.168.1.100和端口80的TCP连接请求通过负载均衡分发给多个实际服务器。