配置文件【7层代理】
nginx
反向代理
调度算法
-
轮询(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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏