Nginx是一款轻量级的高性能的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
使用代理服务器,客户机发送的请求,是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。
占用内存少,并发能力强
可以进行负载均衡,将用户请求分配给多个服务器
提高访问速度
起到了缓存的作用,尤其对于热门站点能明显提高请求速度。
防火墙作用(访问安全控制)
可在代理服务器上设限,过滤某些不安全信息。防止外网对内网服务器的恶性攻击
正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
通过正向代理访问任意网站并且隐藏客户端自身
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
用法: keepalive connections;
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
connections 连接到上游服务器的最大并发空闲keepalive长连接数(默认是未设置)当这个数被超过时,使用"最近最少使用算法(LUR)"来淘汰并关闭连接
http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
用法:keepalive_requests number;
设置通过"一个存活长连接"送达的最大请求数(默认是100,建议根据客户端在"keepalive"存活时间内的总请求数来设置) 当送达的请求数超过该值后,该连接就会被关闭。
keepalive_requests 8192;
http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
用法:keepalive_timeout timeout [header_timeout];
第一个参数设置"keep-alive客户端长连接"将在"服务器端"继续打开的超时时间 可选的第二个参数设置“Keep-Alive: timeout=time”响应头字段的值
http {
keepalive_timeout 20; --长连接timeout
keepalive_requests 8192; --每个连接最大请求数
}
1、转发功能
按照一定的算法,将客户端请求转发到不同应用服务器上,提高系统并发量
分发策略有轮询、权重、ip_哈希算法
权重:指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
2、故障移除(通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器)
3、恢复添加(如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中)
通过在upstream参数中添加的应用服务器IP后添加指定参数即可实现,如:
upstream tomcatserver1 {
server 192.168.72.49:8080 weight=3;
server 192.168.72.49:8081;
}
server {
listen 80;
server_name 8080.max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
通过以上配置,便可以实现,在访问8080.max.com这个网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给49服务器上的tomcat1,也就是8080端口;较少部分给tomcat2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
down 表示单前的server暂时不参与负载
Weight 默认为1.weight越大,负载的权重就越大。
max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout max_fails 次失败后,暂停的时间。
Backup 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
负载均衡服务器也需要高可用,以防如果负载均衡服务器挂掉了,后面的应用服务器也紊乱无法工作。
实现高可用的方案:添加冗余。添加n台nginx服务器以避免发生上述单点故障keepalive+nginx实现负载均衡高可用
主备机上都运行高可用(High Availability)监控程序,通过传送心跳信息来监控对方的运行状况。当备份机不能在一定的时间内收到对方的正常心跳时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。
1.提供两个Nginx负载服务器
2.分别在两台服务器上安装keepalived
3、配置keepalived
虚拟IP指向A和B,当A宕机时,虚拟IP漂移到B上,A启起来后自动成为master
通过对两台服务器的keepalive进行配置,区分出主机和备机服务器,state MASTER 为主机,priority 优先级值大于备机,state BACKUP为备机。
nginx的http_proxy模块,可以实现类似于Squid的缓存功能。Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求。
原文地址:http://blog.51cto.com/12880687/2082998