Nginx负载均衡:分布式/热备Web Server的搭建
Nginx是一款轻量级的Web server/反向代理server及电子邮件(IMAP/POP3)代理server。并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发。供俄国大型的入口站点及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,中国大陆使用nginx站点用户有:新浪、网易、腾讯等。
在一些大型的项目中,Nginx常常是用作负载均衡的,Nginx将请求依照一定的规律分发给分布式的Web Server,这样能够解决Web Server是项目性能瓶颈的问题。这样便构成了LNMPA架构,即Linux+Nginx+Mysql+PHP+Apache,有相同功能的还有LVS,可是各有优缺点,最好的是F5硬件,可是价格很昂贵;同一时候Nginx也很适合处理静态页面。文件上传与下载的server,在这些业务上。其它server软件是无法比拟的。事实上如今有许多项目就直接用Nginx作Web
server,Nginx做Web server在处理PHP业务逻辑上能够没有Apache那么强大,假如单独用Nginx不能满足您项目的须要,那就把业务分离开,Nginx做负载均衡,处理静态页。负责文件上传下载,PHP业务逻辑交给Apache。
Nginx最好安装在Linux系统上,由于在Linux下能够让Nginx达到预期的性能。的安装方法能够參见:
http://blog.csdn.net/jhq0113/article/details/43812895
反向代理与负载均衡配置:
Web Server1: 192.168.1.16:80 Nginx
Web Server2: 192.168.1.16:8080 Nginx
临 时 域 名: yii.nginx.com
Nginx Server: 192.168.1.18:80
本地仅仅有两台机器,所以Web Server就都放在192.168.1.16上了,到真实环境下,配置类似,真实环境下仅仅是Web Server的IP不同。PHP程序同样,这里为了演示区分。Web Server配置不同的PHP程序。
1.在192.168.1.16 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; #######################myphp8080.com配置#########################
server{
listen 8080;#监听8080port
server_name myphp8080.com;
root /home/data/web/php/myphp8080.com; #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;
}
} #######################myphp80.com配置#########################
server {
listen 80;
server_name myphp80.com
root /home/data/web/php/myphp80.com;
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.192.168.1.16 在web文件夹下分别创建myphp80.com和myphp8080.com文件夹,各自文件夹分别创建index.php文件,php代码分别为:
myphp80.com文件夹中index.php代码:
<?php
echo json_encode(['type'=>'200','data'=>'80']);
? >
myphp8080文件夹中index.php代码:
<?php
echo json_encode(['type'=>'200','data'=>'8080']);
? >
将两个文件夹权限交给www组www用户:
[root@jhq0113 php]# chown -R www:www myphp80.com/
[root@jhq0113 php]# chown -R www:www myphp8080.com/
然后。重新启动Nginx服务
[root@jhq0113 php]# service nginx restart
3.防火墙开放80和8080port,开发方法也是參见Nginx安装方法那篇博客。然后在浏览器中进行訪问測试,检查配置是否成功。測试结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamhxMDExMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
4.192.168.1.18 Nginxserver反向代理与负载均衡配置:
######################yii.nginx.com反向代理负载均衡#########################
#负载均衡配置,以权重方式分发
upstream yii.nginx.com {
server 192.168.1.16:80 weight=5;
server 192.168.1.16:8080 weight=5;
} #反向代理配置
server {
listen 80;
server_name yii.nginx.com;
charset utf-8;
location /{
proxy_pass http://yii.nginx.com;
}
}
重新启动Nginx服务
[root@jhq0229 php]# service nginx restart
5.本地域名,浏览器端须要配置hosts。配置hosts方法去网上找吧,非常easy,在hosts文件里加入
192.168.1.18 yii.nginx.com
6.浏览器端訪问yii.nginx.com,多訪问几次。这样我们就能够看到,会依照权重更换显示80port和8080port的内容。
至此。Nginx负载均衡、反向代理配置完成。
Nginx负载均衡的分发方式有4种:
1.轮询。默认採取此方式,Nginx会依照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自己主动将其摘掉。
2.weight,权重,即轮询的几率。值越大,被分发的可能性越大,用于后端server性能不均的情况。
3.ip_hash,每一个请求按訪问ip的hash结果分配,这样每一个訪客固定訪问一个后端server,能够解决共享session的问题。
4.自己定义规则
举例:
upstream myphp.com {
server 192.168.1.16:80 down;
server 192.168.1.18:80 weight=2;
server 192.168.1.13:80;
server 192.168.1.12:80 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、Asp.Net等均能够。
Nginx负载均衡:分布式/热备Web Server的搭建的更多相关文章
- haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题
Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx 为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 ...
- Nginx负载均衡和HTTPS配置及集群搭建
Nginx的高可用(HA)配置 1.高可用配置结构(画图说明) 2.KeepAlived的安装和配置 1.安装 yum install keepalived 2.keepalived.conf配置文件 ...
- Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡
一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...
- Web Server 分布式服务: Nginx负载均衡
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其 ...
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- nginx负载均衡三:keepalive+nginx双机热备 和负载均衡
环境 centos7.0 nginx:1.15 1.主备四台服务器 f1:负载均衡 192.168.70.169 f2:web站点 192.168.70.170 f3:web站点 192.168 ...
- Nginx+Keepalived 实现双击热备及负载均衡
Nginx master : 10.1.58.191 Nginx负载均衡主机 Nginx slave : 10.1.58.181 Nginx负载均衡备机Nginx_VIP_TP: 10 ...
- 搞懂分布式技术9:Nginx负载均衡原理与实践
搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...
- FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]
1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ...
随机推荐
- html里面自定义弹出窗口
网页上默认的提示框或对话框一般比较丑,可以利用div遮盖层来自定义对话框 1.定义一个按钮或者链接(项目里面是通过点击一个图片) <img src="images/zz.gif&quo ...
- linux修改shell为zsh
以前使用的bash,如果目录很长,那么整个路径都被占满了. 询问一下一位大牛,答曰:zsh. 安装:ubuntu下sudo apt-get install zsh 修改默认登录shell: $chsh ...
- 随手记今天跟的几个iOS项目代码的问题
休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验.发现.跟进问题. 第一个问题是点击某个cell就挂掉的现象,同事表示必现但挺神奇.由于挂掉的时候没有啥有意义的信息,所以先简单粗 ...
- Socket编程模式
Socket编程模式 本文主要分析了几种Socket编程的模式.主要包括基本的阻塞Socket.非阻塞Socket.I/O多路复用.其中,阻塞和非阻塞是相对于套接字来说的,而其他的模式本质上来说是基于 ...
- 打工心态废掉了很多人,包括你吗?(你把现在这家公司的业务都弄清楚、弄懂了吗?君子报仇十年不晚!不离不弃!)good
我只拿这点钱,凭什么去做那么多工作,我傻呀. 我为公司干活,公司付我一份报酬,等价交换而已,我不欠谁的. 我只要对得起这份薪水就行了,多一点我都不干,做了也白做. 工作嘛,又不是为自己干,说得过去就行 ...
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
1. 实现过程 1) 上一节讲述了 View 视图的加载过程,它是在 Loader 类中加载的,并通过 Include 语句进行包含.那么为了在 View 中传递变量,只需要在 include 语句所 ...
- leetcode第一刷_Maximal Rectangle
这个题比刚才那个更难. 假设没做过上一个,这个简直是无情. 先想一个笨笨的解法,如何确定一个矩形呢?找一个左上角,然后每行的看能延伸到什么位置.注意随着行数的添加,列数是仅仅能变短,不能变长. 想一下 ...
- 【Flume NG用户指南】(1)设置
作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处: http://blog.csdn.net/zhoubangtao/article/details ...
- Swift实战-QQ在线音乐(第一版)
//一.*项目准备 1.QQ音乐App 界面素材:(我使用PP助手,将QQ音乐App备份,解压ipa文件 即可得到里面的图片素材) 2.豆瓣电台接口:"http://douban.fm/j/ ...
- Java 开源博客——B3log Solo 0.6.7 正式版公布了!
Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...