nginx--做为负载均衡使用
在之前的文章中,我们通过服务代理的方式已经看到了Nginx有作为负载均衡服务的功能了,在这篇文章中,我会讲解Nginx的基本的负载均衡的使用、backup状态演示、轮询策略和加权轮询、负载均衡策略ip_hash的方式、负载均衡策略url_hash策略。
1.负载均衡的基本使用
1.1负载均衡流程图
通过在Nginx服务器中配置proxy_pass和upstream server组可以实现最基本的负载均衡。Nginx收到客户端的请求后,将请求代理路由到upstream server中配置的各个服务中,默认会使用轮询的策略依次访问各个服务。

1.2upstream语法
upstream name {...},而且只能配置在http中
1.3实战一:Nginx将请求负载均衡到后端3个服务中去
1.3.1配置3个后端服务server1,server2,server3
server1.conf的配置文件:
server {
listen 8001;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/log/server1.access.log main;
location / {
root /opt/app/code1;
index index.html index.htm;
}
端口8001,访问的是/opt/app/code1路径下的index.html文件
server2.conf配置文件
####################
#Author:jeson@imoocc.com
####################
server {
listen 8002;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/log/server2.access.log main;
location / {
root /opt/app/code2;
index index.html index.htm;
}
端口8002,访问的是/opt/app/code2路径下的index.html文件
server3.conf配置文件
server {
listen 8003;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/server2.access.log main;
location / {
root /opt/app/code3;
index index.html index.htm;
}
端口8003,访问的是/opt/app/code2路径下的index.html文件
1.3.2新建upstream_test.conf
####################
#Author:zzm
####################
upstream zzm {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
server {
listen 80;
server_name localhost ;
#charset koi8-r;
access_log /var/log/nginx/test_proxy.access.log main;
resolver 8.8.8.8;
location / {
proxy_set_header Host $host;
proxy_pass http://zzm;
}
这里的配置中如果我们监听80端口,如果用户直接访问IP:80/,那么就会负载均衡到8001和8002和8003中的一个上面去。
1.3.3访问3次



实战一完成,说明我们最最基本的负载均衡目的已经达成。
1.4实战二:了解后端服务器在负载均衡调度中的状态
1.4.1状态的种类:
- down:当前的server暂时不参与负载均衡
- backup:预留的备份服务器
- max_fails:允许请求失败的次数
- fail_timeout:经过max_fails失败后,服务暂停的时间
- max_conns:限制最大的接收的连接数
1.4.2设置server1为down状态,server2为预留服务器,server3最大失败次数1
upstream zzm {
server localhost:8001 down;
server localhost:8002 backup;
server localhost:8003 max_fails=1 fail_timeout=10s;
}
1.4.3不断访问localhost:80
访问结果只有server3,因为server1已经down了,server2是备份

1.4.4我们禁止对8003的访问,预期访问server2
我们用iptables命令来限制对8003的访问:iptables -I INPUT -p tcp --dport 8003 -j DROP
此刻再访问localhost:80的结果是:

说明backup生效了。
1.5负载均衡策略

1.5.1加权轮询策略配置
upstream zzm {
server localhost:8001;
server localhost:8002 weight=5;
server localhost:8003;
}
这里我们就只把配置贴出来,具体的演示结果就不展示了
1.5.2ip_hash
upstream zzm {
ip_hash;
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
这里就多配置了ip_hash这个关键字,是根据客户端的ip来进行负载均衡的,但是如果Nginx的前置是路由器的话,它会根据路由器IP来做负载均衡,所以用的不多,我们这里也不做演示。
1.5.3hash关键数值
有时候我们希望用户访问某一些关键路径的时候只能路由到其中的一台服务器上,而不是随机落到一台服务器上,这个时候我们的配置就是这样的:
upstream zzm {
hash $request_uri;
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
无论如何刷新url1.html,都只会到server3上面去访问,而不会到其他两台server中去访问,如下图所示:

Nginx作为负载均衡服务就讲到这里~~Nginx的场景实践篇就讲到这里,接下来我们将深度学习Nginx
作者:没有色彩的狼人
链接:https://www.jianshu.com/p/14c73c5d7e1d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
location / {
proxy_pass http://taishan; #请求转向taishan定义的服务器列表
proxy_set_header Host $host; #将请求头转发给后端服务器
proxy_set_header X-Forward-For $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
#其他相关配置入下,可以根据需要添加配置
#client_max_body_size 10m; #允许客户端请求的最大单文件字节数
#client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
#proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
#proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
#proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
#proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
#proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
#proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
#proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
# root html;
# index index.php index.html index.htm;
upstream apachephp {
server ip:8080; #Apache
}
## Start www.redis.com.cn ##
server {
listen 80;
server_name www.redis.com.cn;
access_log logs/redis.access.log main;
error_log
logs/redis.error.log;
root html;
index index.html index.htm index.php;
## send request back to apache ##
location / {
proxy_pass http:
//apachephp;
#Proxy Settings
proxy_redirect off;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
nginx--做为负载均衡使用的更多相关文章
- windows下利用nginx 做IIS负载均衡
如果网站流量变大,就想加服务器分担压力,当然就要用到负载均衡,在windows 2003有自带的网络负载均衡,但配置还是挺麻烦的虽然有轮训和iphash的效果,但效果不算好. nginx小巧,下载不到 ...
- 利用nginx做tcp负载均衡
当前nginx-13.1已经支持tcp,ucp,unix域套接字三种负载均衡模式(http肯定支持,这个不用说).最近有需求需要对后端服务做负载均衡,因此考虑使用nginx来做. 1. 下载nginx ...
- nginx做反向负载均衡,后端服务器获取真实客户端ip(转)
首先,在前端nginx上需要做如下配置: location / proxy_set_hearder host $host; proxy_set_header X-forw ...
- nginx做反向负载均衡,后端服务器获取真实客户端ip
首先,在前端nginx上需要做如下配置: location / proxy_set_header host $host; proxy_set_header X-fo ...
- Nginx 做JavaWeb负载均衡
随着用户量的增大,单台服务器已经满足不了用户的需求. 准备工作:安装 gcc.pcre-devel.zlib.OpenSSL 一下是在线 离线请戳这里 gcc 安装安装 nginx 需要先将官网下 ...
- Nginx 简单的负载均衡配置演示样例
近期在做开放查询应用的时候,因为数据两天特别多,两千多万条呢,用户訪问需求也比較大,所以就用nginx做了 负载均衡,以下是改动之后的相关内容. http://www.cnblogs.com/xiao ...
- Nginx 简单的负载均衡配置示例(转载)
原文地址:Nginx 简单的负载均衡配置示例(转载) 作者:水中游于 www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP. 用户访问http://www ...
- 观nginx与lvs负载均衡的较量
在技术工作者中,常用到的就是lvs负载均衡和Nginx负载均衡了.这两者也是比较普及的.那么,根据不同的需求,两者存在着不同的优势.具体选择哪一个,还要看您的要求了.那么我们在此为大家分享一篇文章,对 ...
- Nginx+Tomcat+Memcached负载均衡集群服务搭建
操作系统:CentOS6.5 本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...
- nginx 健康检查和负载均衡机制分析
nginx 是优秀的反向代理服务器,这里主要讲它的健康检查和负载均衡机制,以及这种机制带来的问题.所谓健康检查,就是当后端出现问题(具体什么叫出现问题,依赖 于具体实现,各个实现定义不一样),不再往这 ...
随机推荐
- Linux安装docker笔记
更新yum操作 yum -y update 安装docker yum install -y docker 或者yum install -y docker-engine 启动docker servic ...
- JDK8--01:JDK8简介
一.新特性1.lambda表达式(重点)2.函数式接口3.方法引用与构造器引用4.Stream API(重点)5.接口中的默认方法和静态方法6.新时间日期API7.其他新特性 二.特点: 1.速度更快 ...
- DOM-BOM-EVENT(5)
5.宽.高.位置相关 5.1.clientX/clientY clientX和clientY表示鼠标在浏览器可视区的坐标位置 <script> document.onclick = fun ...
- python设计模式之策略模式
每次看到项目中存在大量的if else代码时,都会心生一丝不安全感. 特别是产品给的需求需要添加或者更改一种if条件时,生怕会因为自己的疏忽而使代码天崩地裂,哈哈,本文的目的就是来解决这种不安全感的, ...
- 关于阿里云服务器Linux安装Tomcat后,外网不能访问解决方案
这里需要提及三个方面的问题 第一个方面:Linux上启动防火墙的问题 当下比较流行的Linux镜像是CentOS,所以防火墙也随之变成了firewall,那么怎么操作这个防火墙呢? #停止fi ...
- nginx 代理post请求做负载均衡
项目中遇到nginx代理post请求nodejs服务.但是一直404.发现好像是nginx重定向的时候将post请求变成了get请求.上配置: # 负载均衡服务器配置 upstream pdf_ups ...
- Canvas干货总结
一.canvas简介 <canvas> 是 html5 新增的,一个可以使用脚本(通常为 javascript) 在其中绘制图像的 html 元素.它可以用来制作照片集或者制作简单的动画 ...
- 二.drf之使用序列化编写视图
总结:两功能序列化: a.拿到queryset --->idc = Idc.objects.all() b.将queryset给序列化成类---->serializer = IdcSeri ...
- MySQL 百万级数据量分页查询方法及其优化
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...
- 泛型<T>,是你肿莫了,还是我错了...
委托自定义数组排序 项目一共三个文件如下. CSort.cs using System; using System.Collections.Generic; using System.Linq; us ...