配置文件【7层代理】
nginx
反向代理
graph LR
A[nginx.conf]
B[global]
C[http]
C1[upstream]
C2[server]
C21[location]
C211[if]
D[stream]
D1[upstream]
D2[server]
A -.->|worker进程配置| B
A -.->|http服务配置| C
C -.-> C1
C -.-> C2
C2 -.-> C21
C21 -.-> C211
D -.-> D1
D -.-> D2
A -.- |4层反向代理|D
subgraph 反向代理和http服务
C1
C2
end
subgraph 7层服务配置
C
end
subgraph 4层反向代理
D1
D2
end
subgraph 4层服务配置
D
end
subgraph 全局配置
B
end
subgraph 主配置文件
A
end
调度算法
-
轮询(Round Robin):这是默认的负载均衡算法。每个请求按时间顺序逐一分配到不同的后端服务器,如果服务器down掉,能自动剔除。
upstream core_tomcat { server 192.168.1.253:80 max_fails=3 fail_timeout=30; server 192.168.1.252:80 max_fails=3 fail_timeout=30; }
-
加权轮询(Weighted Round Robin):与轮询类似,但是不同的后端服务器可以设置不同的权重,可以根据服务器的处理能力,分配不同数量的请求。权重越高,分配的请求越多。
upstream core_tomcat { server 192.168.1.253:80 weight=2 max_fails=3 fail_timeout=30; server 192.168.1.252:80 weight=8 max_fails=3 fail_timeout=30; }
-
IP Hash(ip_hash):根据请求的IP的hash结果分配,每个请求会固定访问一个后端服务器,适用于需要会话保持的应用。这有助于为缓存服务器实现更高的缓存命中率,如果其中一台服务器需要临时删除,则应使用down参数标记该服务器,以保留客户端IP地址的当前哈希值
upstream core_tomcat { ip_hash; server 192.168.1.253:80 max_fails=3 fail_timeout=30; server 192.168.1.252:80 max_fails=3 fail_timeout=30; }
-
Fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream core_tomcat { fair; server 192.168.1.253:80 max_fails=3 fail_timeout=30; server 192.168.1.252:80 max_fails=3 fail_timeout=30; }
-
URL Hash(url_hash):根据请求的URL的hash结果来分配请求,使得每个URL定向到同一个后端服务器,适用于服务器缓存时提高效率。
upstream core_tomcat { hash $request_uri; server 192.168.1.253:80 max_fails=3 fail_timeout=30; server 192.168.1.252:80 max_fails=3 fail_timeout=30; }
-
最少连接(least_conn Least Connections):优先分配给当前连接数最少的服务器,适用于请求处理时间相差较大的情况。
-
URL参数(第三方):按照URL中带的参数进行hash,然后进行请求分发,可以实现会话保持。
七层代理
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream backend {
# backup 当其他主机失败后使用该主机,不能用在 hash ip_hash 和random 调度算法中
# down 当前主机不可用,当使用ip_hash 中标记为down不会影响hash值
server 172.16.100.10:8080 weight=1 max_fails=3 fail_timeout=30s;
server 172.16.100.11:8080 weight=1 max_fails=3 fail_timeout=30s;
server 172.16.100.12:8080 weight=1 max_fails=3 fail_timeout=30s;
server 172.16.100.13:8080 backup;
server 172.16.100.14:8080 backup;
}
server {
# 设置X-Real-IP头,使用客户端的真实IP地址。
proxy_set_header X-Real-IP $remote_addr;
# 设置X-Forwarded-For头,添加原始请求的IP地址
proxy_set_header X-Forwarded-For $remote_addr;
# 设置代理请求的Host头,使用请求的原始主机名
proxy_set_header Host $host;
client_max_body_size 0;
location / {
proxy_pass http://backend;
}
}
}
参数解释[7层代理]
-
让应用获取到真实的用户ip
位置:server、location 指令下
# 设置X-Real-IP头,使用客户端的真实IP地址。 proxy_set_header X-Real-IP $remote_addr; # 设置X-Forwarded-For头,添加原始请求的IP地址 proxy_set_header X-Forwarded-For $remote_addr;
-
设置代理请求的Host头,使用请求的原始主机名
位置:server、location 指令下
# 设置代理请求的Host头,使用请求的原始主机名 proxy_set_header Host $host
-
客户端请求的最大大小
位置:http 、server、location指令下
# 设置客户端请求的最大body大小为50MB client_max_body_size 50m; # 设置客户端请求body的缓冲区大小为256KB client_body_buffer_size 256k;
# 关闭代理服务器的重定向功能。
proxy_redirect off;
timeout
# 设置代理连接超时时间为30秒。
proxy_connect_timeout 30;
# 设置代理发送请求的超时时间为30秒。
proxy_send_timeout 30;
# 设置代理读取响应的超时时间为60秒。
proxy_read_timeout 60;
buffer
#设置代理缓冲区的大小为4KB
proxy_buffer_size 4k;
# 设置代理缓冲区的数量和大小 为4*32KB。
proxy_buffers 4 32k;
# 设置代理忙碌缓冲区的大小为64KB。
proxy_busy_buffers_size 64k;
临时文件
# 设置代理临时文件写入大小为64KB。
proxy_temp_file_write_size 64k;
# 设置代理临时文件的最大大小为128MB。
proxy_max_temp_file_size 128m;
提高代理的容错能力
# 定义当出现错误、超时、无效头部、或HTTP状态码为500、503、404时,请求将被转发到下一个上游服务器。
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
缓存静态内容到本地磁盘
# 开启代理存储静态内容到磁盘的功能
proxy_store on;
# 设置代理存储文件的访问权限。
proxy_store_access user:rw group:rw all:r;
# 定义了代理临时文件存储的路径
proxy_temp_path /dev/shm/nginx_proxy;