使用Nginx反向代理实现负载均衡
来源:互联网 发布:千牛手机淘宝店铺装修 编辑:程序博客网 时间:2024/05/29 19:31
前期准备
为了实现负载均衡,我准备了两台服务器。
- 192.168.1.101 这台服务器用于反向代理和web服务器。
- 192.168.58.129 这台服务器仅用作web服务器。
因为我的计算机只装了一台虚拟机。所以暂且使用同一台机器,即作为代理服务器又作为web服务器。分配不同的端口,对实验结果没有影响。
什么是代理
正向代理就是我们平时用的vpn翻墙软件。通过代理这个跳板可以实现访问被防火墙限制的外网。我简单画了一个图。(注:此处使用的图只有请求没有响应。)
通过代理去访问想要访问的服务器,然后代理再把结果反馈回浏览器。
在这一过程中,代理对于用户是可见的,且需要客户端配置之后才能访问。
什么是反向代理
和正向代理相反,正向代理是由客户端配置而使用。所以反向代理是由web服务器配置而使用。这一过程对于客户端来说是不可见的。客户端不会知道有反向代理的存在。这里也简单画了一个图。
在反向代理的请求中,反向代理拿到请求信息后,根据所配置的规则,访问不同的web服务器,最后再把响应信息返回给浏览器。
反向代理的配置
在nginx的配置文件中。server中间加入以下代码就可以了。
location / { #反向代理 proxy_pass http://192.168.58.129;}
这段配置的意思是,当访问192.168.1.101:8081(此服务器使用8081端口作为代理,使用8080端口作为web服务器。)时。会作为代理,去访问192.168.58.129。
查看结果
什么是负载均衡
简单的解释,web服务器的I/O操作是比较消耗时间的。当服务器的请求过高时,会大大消耗服务器的性能。而在访问服务器之间,加一台代理服务器,通过代理服务器,把流量分配给不同的web服务器。以减轻单台服务器的压力。图示如下。
负载均衡的配置
nginx提供的Upstream模块,客户实现负载均衡的策略。
在http的内部,server的外部加入不同的server。
#负载均衡(反向代理)upstream test { #web服务器 server 192.168.58.129:80; #当前服务器 server 192.168.1.101:8080;}
将这些服务器,分配给反向代理。在server的内部加入以下代码
location / { #反向代理 proxy_pass http://test; #proxy_pass http://192.168.58.129; }
配置好了之后,我的负载均衡就完成了。在这个策略中,每次请求都会在192.168.58.129和192.168.1.101直接顺序循环切换。
负载均衡策略
nginx的Upstream模块提供了不少策略。我们实验中使用的是默认的策略,即循环分配到指定的服务器。此外还有以下策略。
- ip_hash
记录每次访客的ip地址,固定分配给指定的服务器,有效的解决了不同服务器网页Session的问题。 - fair
根据后端服务器响应的时间长短来分配,响应时间越短被分配几率越大。 - url_hash
按访问的地址url的hash值结果分配,使每个url定向到指定的服务器,可以提高后端服务器的缓存效率。
可以根据不同需求选择不同的策略,但是2、3两个策略需要下载插件作为支撑。
- 使用Nginx反向代理实现负载均衡
- 使用Nginx反向代理实现负载均衡
- 使用Nginx反向代理来实现简单的负载均衡
- 使用Nginx反向代理来实现简单的负载均衡
- 使用Nginx反向代理来实现简单的负载均衡
- 使用nginx简单实现反向代理和负载均衡
- centos使用nginx反向代理实现负载均衡
- 使用Nginx实现反向代理和负载均衡
- Nginx实现反向代理和负载均衡
- nginx反向代理实现http负载均衡
- nginx做反向代理实现负载均衡
- nginx反向代理tomcat实现负载均衡
- Nginx反向代理实现负载均衡总结
- Nginx反向代理实现均衡负载
- Nginx反向代理实现均衡负载
- Nginx实现负载均衡和反向代理
- Nginx实现负载均衡的反向代理
- Nginx实现反向代理负载均衡
- tomcat配置多个域名
- NYOJ 311 完全背包
- Tensorflow实例:多层感知机(MLP)
- [面试]mysql主从复制原理,3三种读写分离的方式,mysql主从复制和读写分离
- android.graphics(三)graphics
- 使用Nginx反向代理实现负载均衡
- mscomm32串口控件 和 node serialport
- 利用Logstash的logstash-input-jdbc插件实现mysql增量导入ES
- Redis学习笔记(八)事务 和 连接相关命令
- 阿里云--Python使用flask开发项目,外网无法访问
- 建设者模式
- 软件工程---UML类图与类关系
- java笔记
- 四九、node.js实现歌词播放滚动