Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强。
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。
在一些大型的项目中,Nginx经常是用作负载均衡的,Nginx将请求按照一定的规律分发给分布式的Web Server,这样可以解决Web Server是项目性能瓶颈的问题,这样便构成了LNMPA架构,即Linux+Nginx+Mysql+PHP+Apache,有同样功能的还有LVS,但是各有优缺点,最好的是F5硬件,但是价格非常昂贵;
同时Nginx也非常适合处理静态页面,文件上传与下载的服务器,在这些业务上,其他服务器软件是无法比拟的;
其实现在有很多项目就直接用Nginx作Web服务器,Nginx做Web服务器在处理PHP业务逻辑上可以没有Apache那么强大,假如单独用Nginx不能满足您项目的需要,那就把业务分离开,Nginx做负载均衡,处理静态页,负责文件上传下载,PHP业务逻辑交给Apache。
反向代理与负载均衡配置:
Web Server1: 172.22.28.237:80
Web Server2: 172.22.28.235:80
Web Server3: 172.22.28.234:80
域名: test.box.com
Nginx Server: 47.252.83.223:80
1.Nginx配置
user www; #运行用户 worker_processes 1; #工作进程数量,最好是CPU核心数量 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; charset utf-8; sendfile on; keepalive_timeout 65; server{ listen 80;#监听80端口 server_name test1.box.com; root /srv/box/site1; #web目录 location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; server_name test2.box.com root /srv/box/site2; #web目录 location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; server_name test3.box.com root /srv/box/site3; #web目录 location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
2.在web目录下分别创建site1和site2目录,各自目录分别创建index.php文件,php代码分别为:
site1 <?php echo json_encode(['type'=>'200','data'=>'test']); ?> site2 <?php echo json_encode(['type'=>'200','data'=>'test2']); ?> site3 <?php echo json_encode(['type'=>'200','data'=>'test3']); ?>
将两个目录权限交给www组www用户:
chown -R www:www site1/
chown -R www:www site2/
chown -R www:www site3/
3 Nginx服务器反向代理与负载均衡配置:'
#负载均衡配置,以权重方式分发 upstream test.box.com { server 172.22.28.237 weight=5; server 172.22.28.235 weight=5; server 172.22.28.234 weight=5; } #反向代理配置 server { listen 80; server_name test.box.com; charset utf-8; location /{ proxy_pass http://test.box.com; } }
4,重启Nginx服务 service nginx restart
5,浏览器端访问test.box.com,多访问几次,这样我们就可以看到,会按照权重更换显示不同内容。
至此,Nginx负载均衡、反向代理配置完毕。
Nginx负载均衡的分发方式有4种:
1.轮询,默认采取此方式,Nginx会按照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将其摘掉。
2.weight,权重,即轮询的几率,值越大,被分发的可能性越大,用于后端服务器性能不均的情况。
3.ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决共享session的问题。
4.自定义规则
举例:
upstream test.box.com {
server 172.22.28.237 down;
server 172.22.28.235 weight=2;
server 172.22.28.236;
server 172.22.28.234 backup;
}
配置详解:
down 表示当前的Web Server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup Server down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
backup是利用nginx的热备功能,这也是最典型的应用带来的重要好处之一,当非backup Server能够很好的为Client提供服务的时候,backup Server不对外界提供服务,此时backup Server处于冷状态;当所有非backup Server不能很好的为Client提供服务的时候,backup Server为Client提供服务,做到了热备,某台或者所有非backup Web Server宕机不会影响整个Web项目的访问功能,Web项目仍然可以为Client提供服务。
Nginx做负载均衡,对Web Server的操作系统和语言环境没有特殊要求,Web Server的操作系统可以是Linux也可以是Windows Server,Web程序是Java、PHP、.Net等均可以。