Nginx是高性能的Web服务器,同时也支持负载均衡(反向代理)
支持的负载均衡方式
1. Tcp层负载均衡,支持:http、mysql、redis、mongo等,不支持动静分离
2. Http层负载均衡,默认编译就支持http负载均衡,支持动静分离
Nginx TCP层负载均衡(反向代理)
需要--with-stream模块才能支持Tcp负载均衡
Tcp层负载均衡配置在stream里
upstream中配置真实服务器的IP+端口
upstream中如果有多台,默认使用轮循算法
worker_processes 1; events { worker_connections 1024; } stream { log_format basic '$remote_addr [$time_local]' '$protocol $status $bytes_sent $bytes_received ' '$session_time $upstream_addr'; access_log logs/tcp.log basic; upstream web{ server 192.168.237.51:80; server 192.168.237.51:81; } server { listen 88; proxy_pass web; } }
Http层的负载均衡配置在http层里面
upstream中配置真实服务器的IP+端口
配置多个默认会使用轮循算法转发
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; log_format main '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '$request_time $upstream_response_time $upstream_addr' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; upstream web{ server 192.168.30.11:80; server 192.168.30.11:81; } server { listen 88; location / { proxy_pass http://web; } } }
反向代理,后端只有一台,就不需要upstream了
server { listen 88; location / { proxy_pass http://192.168.30.11:81; } }
Nginx常用的负载均衡算法
1. 加权轮循
2. ip_hash,根据访问的IP来决定分配到哪台服务器
3. 最小连接数
1. 加权轮循
upstream web{ server 192.168.30.11:80 weight=3; server 192.168.30.11:81 weight=1; }
2.ip_hash upstream web{
ip_hash; server 192.168.30.11:80 ; server 192.168.30.11:81 ; }
3. 最小连接数
upstream web{
least_conn;
server 192.168.30.11:80 weight=3;
server 192.168.30.11:81 weight=1;
}