共计 3124 个字符,预计需要花费 8 分钟才能阅读完成。
当生产环境里有很大的流量产生时,通常需要用负载均衡技术来做优化,并确保容错配置。Nginx 不光可以实现 Web Server,还可以作为 HTTP 负载均衡来分发流量给后端的应用程序服务器,以此来提高性能。Nginx 的负载均衡功能依赖于 ngx_http_upstream_module 模块,所支持的代理方式有 proxy_pass,fastcgi_pass,memcached_pass。
Nginx 常用负载均衡算法:
轮询(默认算法)——每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力
加权轮询——权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况
IP HASH——当同 IP 进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站 SESSION 共享问题
upstream 模块常用参数说明:
server 192.168.0.100:80 | 负载均 衡后端 RealServer 的 IP 或者域名,端 口不写的话默认 为80。高并发场景用域名,再通过 DNS 进行负载均衡 |
weight=5 | 权重,默认为 1,权重越大接收的请求越多 |
max_fails=2 | 最大尝试的失败次数,默认为 1,0 表示禁止失败尝试 |
fail_timeout=10s | 失败超时时间,默认是 10 秒,通常 3s 左右比较合适 |
backup | 热备配置,前段 RealServer 出现问题后会自动上线 backup 服务器 |
down | 标志 服务器不可用,这个参数通常配合 IP_HASH 使用 |
Nginx 负载均衡设置:
默认的负载均衡配置
http {#upstream 模块包含在 http 模块下
upstream linuxidc{#定义 upstream 名字,下面会引用
server 192.168.1.100; #指定后端服务器地址
server 192.168.1.110; #指定后端服务器地址
server 192.168.1.120; #指定后端服务器地址
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc; #引用 upstream
}
}
}
在上面的例子中,当用户访问 www.linuxidc.com 站点时,Nginx 会负载平衡分配给后端的三个服务器。
加权负载均衡
http {
upstream linuxidc{
server 192.168.1.100 weight=3; #指定后端服务器地址,权重为 3
server 192.168.1.110;
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc;
}
}
}
在上面配置中,每 3 个请求分配给 192.168.1.100,然后第 4 个请求会分配给 192.168.1.110,如此循环下去。
IP HASH 负载均衡
upstream linuxidc {
ip_hash; #采用 IP HASH 算法
server 192.168.1.100;
server 192.168.1.110;
server 192.168.1.120;
}
如果需要将客户与后端一台服务器“绑定”起来,可以使用 ip-hash 负载平衡机制。这样可以确保来自相同客户机的请求总是指向相同的服务器除非该服务器不可用。
Nginx 高可用的实现,利用 backup 标签,可以实现高可用,当主服务挂掉后,backup 服务器会自动接管服务,当主服务恢复后,backup 也会自动放弃服务
http {
upstream linuxidc{
server 192.168.1.100
server 192.168.1.110 backup;
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc;
}
}
}
Nginx 的 upstream 模块相当于是建立一个函数库一样,把后端的服务器地址放在了一个池子里,而 proxy 模块则是从这个池子里调用了这些服务器。
http_proxy_module 模块常用参数:
proxy_set_header:让后端服务器能获取到前端用户真实 IP,而不只是代理服务器的 IP
proxy_set_header Host $host;
# 当后端服务器配置多个 web 站点时,该选项可以让服务器识别出具体要访问的是哪个站点,而不会将第一个站点作为默认站点传递给用户
proxy_set_header X-Forwarded-For $remote_addr;
# 如果后端服务器需要获取用户的真实 IP,需要该选项
client_body_buffer_size:客户端请求主体缓冲区大小
proxy_connect_timeout:代理服务器和后端真实服务器握手连接超时时间
proxy_send_timeout:后端服务器回传数据给 Nginx 的时间,需要在设置的时间范围内发送完所有数据,否则 Nginx 将断开连接
proxy_read_timeout:代理服务器和后端服务器连接成功后,等待后端服务器响应时间
前端 Nginx 反向代理,如何获取客户端真实 IP?
# 转发动态页面给 Tomcat 处理
location ~ \.(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
更多 Nginx 负载均衡配置 相关教程见以下内容:
Nginx 负载均衡配置说明 http://www.linuxidc.com/Linux/2016-03/129424.htm
Linux 下 Nginx+Tomcat 负载均衡和动静分离配置要点 http://www.linuxidc.com/Linux/2016-01/127255.htm
Docker+Nginx+Tomcat7 配置简单的负载均衡 http://www.linuxidc.com/Linux/2015-12/125907.htm
Nginx 负载均衡(主备)+Keepalived http://www.linuxidc.com/Linux/2015-12/126865.htm
使用 Nginx 作为负载均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm
CentOS 环境下 Nginx 实现 3 台虚拟机负载均衡 http://www.linuxidc.com/Linux/2015-12/125875.htm
Nginx 反向代理负载均衡群集实战 http://www.linuxidc.com/Linux/2015-08/122111.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130350.htm