负载均衡配置
配置语法
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass http://backend;
}
}
配置实例
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001 max_fails=100 fail_timeout=30000; # 允许请求失败的次数;经过max_fails失败后,服务暂停的时间;
server 127.0.0.1:8002 backup; # 预留的备份服务器(当正在使用的后端服务异常时,启动预留服务)
server 127.0.0.1:8003 down; # 当前server暂时不参与负载均衡
server 127.0.0.1:8004 max_conns=100; # 限制最大的接受的连接数
keepalive 600; # 配置到后端服务器的长连接(需要配合server中的 proxy_http_version 和 proxy_set_header 配置才能生效)
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
proxy_http_version 1.1; # 配置支持长连接
proxy_set_header Connection ""; # 配置支持长连接
}
}
}
调度算法
算法 | 说明 |
---|---|
加权轮询 | weight值越大,访问到的几率越高 |
ip_hash | 每个请求按访问IP的hash结果分配,来自同一个IP的请求会访问固定的服务器 |
least_conn | 最少链接数,哪个机器的连接数少就分配到那个机器上 |
url_hash | 按照访问的URL的hash分配请求,每个url定向到同一个服务器 |
hash关键数值 | hash自定义的key |
流控配置
todo
访问限制
todo
性能优化
# 工作进程等于核心数
worker_processes 2;
# CPU亲缘性绑定
worker_cpu_affinity 01 10;
# 配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535;
events {
#使用epoll模型
use epoll;
#单个进程允许的客户端最大连接数
worker_connections 20480;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on; # sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。
tcp_nopush on;
keepalive_timeout 120;
gzip off;
access_log off; #日志功能要关闭
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
}