Nginx 负载均衡
什么是负载均衡?
负载均衡:
英文名称为 Load Balance,其主要意思是将任务分配到多个服务器上分别执行,进而达到提高执行效率,缩短执行时间的目的。
负载均衡类型
- 硬负载均衡
- 软负载均衡
Nginx 六种 负载均衡策略
- Default (轮询 策略)
- Least Connected (最少连接策略)
- IP Hash (IP 绑定策略)
- Weighted (权重策略)
- fair (按响应时间【第三方】)
- url_hash (按url 分配策略 【第三方】)
#后端服务器池
upstream babytun {
#最少连接策略
#least_conn;
#IP绑定策略
#ip_hash;
# 权重策略
server 127.0.0.1:8001 weight=5 max_fails=1 fail_timeout=3s;
server 127.0.0.1:8002 weight=2;
server 127.0.0.1:8003 weight=1;
server 127.0.0.1:8004 weight=3;
}
Nginx 心跳 检查机制
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s
- max_fails 代表 最大失败次数
- fail_timeout 代表单次连接超时时间
设置日志打印格式
# 日志内容打印格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr "$upstream_status" ${upstream_response_time}';
# 日志文件存放地址
access_log logs/access.log main;
日志打印 格式变量为nginx 预置变量,有其他需求,可前往nginx 官网进行查看
设置静态资源进行缓存
#代表了临时文件夹
proxy_temp_path d:/nginx-temp;
#设置缓存目录
#levels代表采用1:2也就是两级目录的形式保存缓存文件(静态资源css、js),同时文件名进行了md5编码
#keys_zone定义缓存的名称及内存的使用,名称为cache ,在内存中开始100m交换空间
#inactive=7d 如果某个缓存文件超过7天没有被访问,则删除
# max_size=20g;代表设置文件夹最大不能超过20g,超过后会自动将访问频度(命中率)最低的缓存文件删除
proxy_cache_path d:/nginx-cache levels=1:2 keys_zone=cache:100m inactive=7d max_size=20g;
server {
#nginx通过80端口提供服务
listen 80;
#静态资源缓存
#利用正则表达式匹配url,匹配成功的则执行内部逻辑
#~* 不区分大小写
location ~* \.(gif|jpg|css|png|js|woff|html)(.*){
# 代理地址
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 代理缓存 空间 ,取之前定义缓存命名
proxy_cache cache;
#如果静态资源响应状态码为200(成功) 302(暂时性重定向)时 缓存文件有效期1天
proxy_cache_valid 200 302 24h;
#301(永久性重定向)缓存保存5天
proxy_cache_valid 301 5d;
#其他情况
proxy_cache_valid any 5m;
#浏览器的缓存时间
expires 90d;
}
设置 文件压缩 GZIP (css,js…)
#开启Nginx Gzip压缩
gzip on;
#只有超过1K的文件才压缩
gzip_min_length 1k;
#说明那些类型的文件在传输前进行压缩
# image/jpeg类似的图片文件,gzip压缩后效果并不明显 ,gzip对于文本文件的压缩效果较好
# 如果 在高并发或是大量用户请求中,image 图片资源 占比较大,采用 CDN 服务
gzip_types text/plain application/javascript text/css application/x-javascript application/font-woff;
#低版本IE禁用Gzip压缩
gzip_disable "MSIE [1-6]\.";
#压缩使用的缓存,每个内存页为4K ,申请32个,缓存总量为128K
gzip_buffers 32 4k;
#压轴的,设置压缩级别 1-9 越大压缩比越高,但消耗的CPU资源也越多
#建议1-4即可
gzip_comp_level 1;
nginx 配置文件
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# 日志内容打印格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr "$upstream_status" ${upstream_response_time}';
# 日志文件存放地址
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#开启Nginx Gzip压缩
gzip on;
#只有超过1K的文件才压缩
gzip_min_length 1k;
#说明那些类型的文件在传输前进行压缩
# image/jpeg类似的图片文件,gzip压缩后效果并不明显 ,gzip对于文本文件的压缩效果较好
# 如果 在高并发或是大量用户请求中,image 图片资源 占比较大,采用 CDN 服务
gzip_types text/plain application/javascript text/css application/x-javascript application/font-woff;
#低版本IE禁用Gzip压缩
gzip_disable "MSIE [1-6]\.";
#压缩使用的缓存,每个内存页为4K ,申请32个,缓存总量为128K
gzip_buffers 32 4k;
#压轴的,设置压缩级别 1-9 越大压缩比越高,但消耗的CPU资源也越多
#建议1-4即可
gzip_comp_level 1;
#代表了临时文件夹
proxy_temp_path d:/nginx-temp;
#设置缓存目录
#levels代表采用1:2也就是两级目录的形式保存缓存文件(静态资源css、js),同时文件名进行了md5编码
#keys_zone定义缓存的名称及内存的使用,名称为cache ,在内存中开始100m交换空间
#inactive=7d 如果某个缓存文件超过7天没有被访问,则删除
# max_size=20g;代表设置文件夹最大不能超过20g,超过后会自动将访问频度(命中率)最低的缓存文件删除
proxy_cache_path d:/nginx-cache levels=1:2 keys_zone=cache:100m inactive=7d max_size=20g;
#后端服务器池
upstream babytun {
#最少连接策略
#least_conn;
#IP绑定策略
#ip_hash;
# 权重策略
server 127.0.0.1:8001 weight=5 max_fails=1 fail_timeout=3s;
server 127.0.0.1:8002 weight=2;
server 127.0.0.1:8003 weight=1;
server 127.0.0.1:8004 weight=3;
}
server {
#nginx通过80端口提供服务
listen 80;
#静态资源缓存
#利用正则表达式匹配url,匹配成功的则执行内部逻辑
#~* 不区分大小写
location ~* \.(gif|jpg|css|png|js|woff|html)(.*){
# 代理地址
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 代理缓存 空间 ,取之前定义缓存命名
proxy_cache cache;
#如果静态资源响应状态码为200(成功) 302(暂时性重定向)时 缓存文件有效期1天
proxy_cache_valid 200 302 24h;
#301(永久性重定向)缓存保存5天
proxy_cache_valid 301 5d;
#其他情况
proxy_cache_valid any 5m;
#浏览器的缓存时间
expires 90d;
}
#使用服务器池进行后端处理
location /{
# 代理
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}