Nginx…怎么看怎么奇怪的单词…没办法它是俄罗斯人整出来的。
0.Nginx概述
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
概念性的就不多说了,说说他能干啥…
HTTP服务器: 首先这东西能很好的替代Apache,毕竟Apache这个东西,对高并发访问实在没什么好的支持。
代理服务器: 他能做很多代理服务器比如POP3、SMTP代理服务器
负载均衡服务器: Nginx可以作为反向代理进行负载均衡的实现。
对比项 | Apachhe | Nginx |
---|---|---|
热部署 | 不支持 | 支持 |
系统压力 | 大 | 很小 |
静态文件处理 | 一般 | 很好 |
反向代理 | 一般 | 很好 |
1.正/反向代理
1.1正向代理
画个图…正向代理如下:
正向代理最大的特点是客户端非常明确要访问的服务器地址,正向代理,“它代理的是客户端,代客户端发出请求”。
1.2反向代理
反向代理如下图所示
反向代理,“它代理的是服务端,代服务端接收请求”。
用起来…
我们以Nginx代理tomcat服务器为例。(毕竟项目里就这么用的)
首先搭建好Nginx和tomcat服务
Tomcat:JDK一装tomcat一装完事(JDK建议使用oracle的。OPENJDK有可能出版本冲突,我部署的时候刚开始就是OpenJDK,部署就抛异常JDK版本冲突改成oracle的就好使。我的开发环境是oracle的1.8)
Nginx:C语言开发的所以得有个gcc环境,以及几个库,怎么搭建不是本篇重点就不仔细介绍了。
都整完了我们把tomcat服务器启动。OK不用管它了。
Nginx需要做点配置,需要修改nginx.conf文件。
路径:nginx/conf/nginx.conf,留在负载均衡讲具体应该怎么写。
2.负载均衡
2.1Nginx负载均衡策略
1)轮询(默认方式):简单一人一次,在轮询中,如果服务器down掉了,会自动剔除该服务器。
也是我在用的…毕竟服务器性能都一样…
server {
listen 80;#监听端口
server_name manager.eas.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://manager.eas.cn;#域名
index index.html index.htm;
}
}
upstream manager.eas.cn {#转发给的Tomcat ip地址
server 192.168.125.1:8080;#Tomcat1
server 192.168.125.2:8080;#Tomcat2
}
域名是通过DNS修改器SwitchHosts改的…
说个参数…backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。一定程度上实现高可用。
2)权重(weight):在轮询策略的基础上指定轮询的几率。用上面的例子改一下。
upstream manager.eas.cn {#转发给的Tomcat ip地址
server 192.168.125.1:8080 weight=2;#Tomcat1
server 192.168.125.2:8080 weight=1;#Tomcat2
}
比例和配置的数字成正比,也就是说数越大负载量越大。权重越高分配到需要处理的请求越多。此策略比较适合服务器的硬件配置差别比较大的情况。Tomcat2就是Tomcat1的二倍。
3)指定IP地址(ip_hash):指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器。(一定程度上可以解决session跨域问题,都一台服务器有啥跨域…)
upstream manager.eas.cn {#转发给的Tomcat ip地址
ip_hash;
server 192.168.125.1:8080 weight=2;#Tomcat1
server 192.168.125.2:8080 weight=1;#Tomcat2
}
ip_hash不能与backup同时使用。
4)least_conn:把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream manager.eas.cn {#转发给的Tomcat ip地址
least_conn;
server 192.168.125.1:8080 weight=2;#Tomcat1
server 192.168.125.2:8080 weight=1;#Tomcat2
}
第三方插件方式
5)fair:按照服务器端的响应时间来分配请求,响应时间短的优先分配。
6)url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
用Jmeter做个测试…线程设了500个,只对两个Tomcat做负载均衡。我们一看出来在第二天Tomcat没启动之前响应时间一直在增高,启动之后开始下降。能看出来点效果…毕竟笔记本线程整太多就崩了…
补充下…反向代理也相当于做了缓存可以进一步提高性能。