利用nginx实现负载均衡和动静分离
1、Nginx介绍
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。
2、为什么使用Nginx
Nginx 是一个高性能Web和反向代理服务器, 它具有有很多非常优越的特性:
l 在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型.
l Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.
l 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.
l Nginx 是一个 [#installation 安装] 非常的简单 , 配置文件 非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级 。
以上都是官方的一些说法,看看网上的一些意见:“4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。而这台 Nginx 0.5.31 + PHP 5.2.4 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗100M内存(20MB*10=100M),开启的250个php-cgi进程消耗1G内存(4MB*250≈1GB),加上系统自身消耗的内存,总共才消耗2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才100M。在开启25个php-cgi进程的情况下,每分钟的处理能力只比开启250个php-cgi进程时低了不到一半。”
3、Nginx的安装
基于李,杨家用的1台主机,操作系统是Win2003版本的,进行安装配置。
Windows的安装比较简单,直接到http://wiki.nginx.org/NginxInstall下载需要的压缩包,解压到相应目录(假如是C:/nginx),点击目录下面的nginx.exe即可启动。
4、动静分离和负载均衡的准备工作
l Host配置:
127.0.0.1 yangli.com
l 服务器:win2003 1台
l Web容器:Tomcat 6(8888端口)、Resin(8080端口)
Tomcat和resin都部署相同应用,getUsers.jsp作为测试页面。
l 反向代理服务器:Nginx-0.8.34.zip
静态目录路径:e:/home/htmlfile/getUsers.html
l 项目部署:普通web项目,例如:example
? Resin-3.0.26配置:
<host id="yangli.com" root-directory=".">
<web-app id="/" document-directory="E:/example/webapp"/>
</host>
? Apache-tomcat-6.0.26 配置文件:
D:\apache-tomcat-6.0.26\webapps\examples
修改:D:\apache-tomcat-6.0.26\conf\server.xml
增加:
<Host name="yangli.com" appBase="D:\apache-tomcat-6.0.26\webapps\examples"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="D:\apache-tomcat-6.0.26\webapps\examples">
</Context>
</Host>
主要是为了解决访问tomcat服务器的时候,
不需要http://yangli.com:8888/examples/getUser.jsp
可以直接访问:http://yangli.com:8888/getUser.jsp
具体说明,可以上网搜搜。
l 实现原理图:
配置原理图
5、动静分离
假设后端只有一台web服务器,配置如下:
upstream yangli.com {
server 127.0.0.1:8888;
#tomcat
}
server {
listen 2010;
server_name yangli.com;
access_log off;
location / {
root e:/home/htmlfile;
index index.html index.htm;
if (!-f $request_filename) {
rewrite ^/([a-zA-Z]+).html /$1.jsp last;
proxy_pass http://yangli.com;
break;
}
}
}
注明:如果是静态文件将定位到:e:/home/htmlfile; 目录
如果e:/home/htmlfile不存在该文件,则请求到后端服务器:
这里使用了rewrite规则rewrite ^/([a-zA-Z]+).html /$1.jsp last;
if (!-f $request_filename) {
rewrite ^/([a-zA-Z]+).html /$1.jsp last;
proxy_pass http://yangli.com;
break;
}
当我们请求:
此时:访问的是E:\home\htmlfile\2010.html
当我们访问:
根据rewrite规则,实际请求到了:127.0.0.1:8888上的tomcat进行处理,这样子就实现了动静分离,而对于用户来说,感觉只是仅仅访问了html页面。
同样测试Resin,也是成功的。
6、负载均衡
1. Nginx 负载均衡基础知识
nginx的upstream目前支持4种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
在需要使用负载均衡的server中增加
proxy_pass http://yangli.com;
每个设备的状态设置为:
a) down 表示单前的server暂时不参与负载
b) weight 默认为1.weight越大,负载的权重就越大。
c) max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
d) fail_timeout:max_fails次失败后,暂停的时间。
e) backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
修改配置如下:
upstream yangli.com {
server 127.0.0.1:8888;
#tomcat
server 127.0.0.1:8080 backup;
#resin
}
下面来测试一下:
实际上访问了:
由于:resin设为backup,那么当tomcat宕机了,nginx会将请求发送到resin服务器,此时resin接管了tomcat,为外界提供服务。
测试如下:
1、关闭tomcat服务器
执行:D:\apache-tomcat-6.0.26\bin\shutdown.bat
表明tomcat已经被关闭
2、访问http://yangli.com:2010/getUsers.html
请求到resin服务器上了。
3、启动tomcat服务器:
D:\apache-tomcat-6.0.26\bin\startup.bat
页面访问正常
4、访问http://yangli.com:2010/getUsers.html
由于tomcat工作正常,于是又接管,作为主服务器进行工作。
7、总结
本文主要阐述了利用Nginx实现动静分离和负载均衡,其中后端服务器使用了Resin和Tomcat,旨在表明Nginx并不关心后端服务器类型,只要后端服务器部署了相同的应用,访问正常即可。
利用nginx实现负载均衡和动静分离的更多相关文章
- Nginx+Tomcat负载均衡、动静分离群集
Nginx+Tomcat负载均衡.动静分离群集 目录 Nginx+Tomcat负载均衡.动静分离群集 一.Tomcat 1. Tomcat简介 2. Tomcat重要目录 二.Nginx负载均衡原理 ...
- Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离
Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...
- Linux下Nginx+Tomcat负载均衡和动静分离配置要点
本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...
- 19.Tomcat多实例部署及负载均衡、动静分离
Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...
- Nginx加多个tomcat实现负载均衡,动静分离
一:Nginx+Tomcat的动静分离 所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片.html等静态的文件,tomcat(或weblogic)处理jsp.do等动态文件,从 ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...
- 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现
目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...
- Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例
场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...
随机推荐
- JAVA提高九:集合体系
在经过了前面的JDK6.0新特性的学习后,将进一步深入学习JDK,因为集合的重要性,因此从集合开始入手分析: 一.集合概况 Java是一种面向对象语言,如果我们要针对多个对象进行操作,那么首先必要将多 ...
- angular指令中@,=,&的区别
当directive中的scope设置为一个对象的时候,该指令就有了一个独立的作用域,AngularJS提供了一种绑定策略用于隔离作用域和外部作用域进行通信. 1.@(or @attr) 使用@符号可 ...
- B. An express train to reveries
B. An express train to reveries time limit per test 1 second memory limit per test 256 megabytes inp ...
- 史考特证券(Scottrade)填写提款申请表的要求以及注意事项
史考特证券(Scottrade)填写申领表的要求以及注意事项. 需要注意的几点: 1. 史考特账户名称 就是你的名字,例如 San Zhang 2. 账户居住地址,就是你开户申请时候填写的地址, 你也 ...
- CentOS系统中出现错误--SSH:connect to host centos-py port 22: Connection refused
我在第一次搭建自己的 hadoop2.2.0单节点的伪分布集成环境时遇到了此错误,通过思考问题和查找解决方案最终搞定了这个问题,其错误原因主要有以下几种: 1)SSH服务为安装 此时,采用在线安装的方 ...
- details和summary可以对内容进行折叠
使用<details>和<summary>元素 它可以在body的任意地方使用下面有一个小例子 <!DOCTYPE html> <html lang=&quo ...
- socket阻塞IO流程图
单线程 多线程
- vue新手入门——vue-cli搭建
首先说明,以下内容vue官网都有文档,如果觉得麻烦啰嗦,请移步至 安装-vue.js . 准备工作: 1.下载并安装node环境,一般情况下安装好node之后,npm也会安装好.具体安装的话,百度大概 ...
- linux C/C++开发环境搭建指南
一.安装基本开发环境 1.配置GCC 刚装好的系统中已经有GCC了,但是这个GCC什么文件都不能编译,因为没有一些必须的头文件,所以要安装build-essential这个软件包,安装了这个包会自动安 ...
- javaBean实体包区分
随着软件工程结构越来越复杂,单一的entity实体包无法满足业务需要,可以采取PO,BO,DTO结构来分类实体. PO (Persistent Object):与数据库表数据关联的实体. BO(Bus ...