高性能web服务器-ngnix
MySQL读写分离技术
sphinx和mongodb
课程内容简介
一般都是拿nginx作为负载均衡器使用。Apache还是web市场老大。全球的市场份额大概在(60%),但是全球前 top1000 的web网站中,nginx占据首位。
内容 |
重要性 |
nginx简介 |
※ |
常见web服务器分类 |
※ |
哪些地方在用nginx |
※ |
ngnix的安装(Linux下) |
※※ |
lnmp搭建(lamp) |
※※ |
ngnix负载均衡器配置(工作) |
※※ |
扩展知识(tengine 淘宝) |
※ |
nginx简介
nginx是一个高性能的web服务器,同时也是一个邮件代理服务器,同时还是一个负载均衡器。
1. web服务器:类似Apache(httpd)提供web服务器(用的其次)
2. 邮件代理服务器:主要用来做邮件的转发(nginx早起的设计也是为了邮件转发,初衷,用的最少)
3. 负载均衡器:用来转发用户的web请求,给web服务器来处理(尤其是在均衡器的时候,有其独特的优势,这也是目前互联网用它最多的地方)
负载均衡器:软件和硬件
软件:nginx(七层,简单配置)和lvs(四层,功能强大)
硬件:f5 (游戏和银行)
负载均衡集群:由负载均衡器组成的集群就是负载均衡集群
集群:就是多台服务器为了完成某一个相同的任务而组成的架构。(多台服务器完成)
如果给服务器集群增加一个备用的监控(高可用集群)
高可用集群衡量的标准:一年中无故障的时间/(一年中无故障的时间+修复的时间)
一般是9的数量来衡定。如果没有修复(100%) 99.9% 99.99% 99.999%
如果是5个9 一年下来故障的时间大概就是 5 分钟。
建议:游戏公司、电商公司
游戏公司:转岗(php开发、Linux管理、MySQL、自动化运维、erlang 热备份)-》大数据
电商公司:纯开发新的系统,主要是功能的开发和维护。
建站公司:如果技术相对来说较弱。
微信:相对来说不建议去了。(微信分销系统)
【------内存----】 软件(操作系统)开机--- 自举 BIOS(cmos硬件设备---生产商写入一段代码 读)---硬盘(分区 MBR 主引导记录--- 分区信息--操作系统C盘)
格式化磁盘(数据全部存在)----- 使用专门的工具--- 0 1 重写
nginx是由俄国人开发,也开发卡巴斯基杀毒软件。还开发了一个叫做sphinx的软件(中文分词搜索)。
由于其性能非常优越,所以在中国的淘宝公司对其做了二次开发,形成了一款更适合在国内使用的web服务器,叫做tengine(web服务器)。目前很多国内大型站点,基本都是使用的tengine。
http://hustskyking.cnblogs.com/
问题:为什么nginx(tengine)能够有非常好的性能,支撑更大的并发访问?
对于1u服务器(2w---dell服务器 性价比最高)这样的服务器使用nginx支撑静态的并发请求大概在3-5w并发没问题。
主要由于其架构设计的合理。并且由于Apache是早起的web服务器,压根就没有考虑大并发。而nginx是后期之秀,其设计的初衷也是为了大并发,主要解决了c10k的问题。
设计:epoll event 基于事件回调模型
问题:什么是C10k?
答:c:并发,意思就是当网站的并发数量达到10k以上,这个时候网站整体的性能就会急剧下降,需要使用新的的架构来设计(基于事件模型 event),nginx应用而生。
参考:http://blog.csdn.net/jysg9/article/details/7901321
http://rdc.gleasy.com/%E5%A6%82%E4%BD%95%E5%81%9A%E5%88%B0c100k_1.html
http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/
常见web服务器的分类
-
httpd:Apache,是一款非常稳定的web服务器,并且它是基于模块而设计(php,rewrite。。。),但是有一个弊端,就是使用的内存开销非常大
-
nginx:后期,其主要特性还是用于负载均衡器和web服务器。在处理并发的问题上,尤其独特的优势,但是有一个弊端,相对不是很稳定。使用的内存开销非常小,处理1000个非活动的链接,大概需要不要2M的内存。
-
lighttpd(小型):主要用于做图片服务器。早期的豆瓣是有使用。
-
tomcat:这个是Java
-
IIS:Windows的一个web服务器,常和Windows server 和sql server一起使用
Apache为什么这么流行:主要
-
早期开发的,很多系统基于它开发,不便于做更换。
-
早期开发,模块众多(php 、Rewrite、header。。。。),文档齐全
-
Apache非常的稳定。
明白:很多公司在效率和稳定性需要选择的情况下,有限考虑的是稳定性。
问题:nginx可以取代Apache服务器吗?
问题:nosql数据库能取代关系型数据库(MySQL)吗?
答:nginx从目前来看,是无法取代Apache这类web服务器。主要是由于Apache非常稳定和模块众多,并且已经拥有强大的市场。只能说着两个产品可以相辅相成的工作。谁都离不开谁了。
哪些地方在使用?
-
淘宝(tengine)
-
搜狐
-
网易
-
赶集
cdn的使用
tengine使用
淘宝使用
nginx搭建使用
在Linux下做源码编译安装
注意:
-
nginx的安装需要依赖pcre库,所以需要先安装
# pcre库安装下,需要注意,安装这个库文件的时候,不需要指定安装路径 ./configure 即可
-
检测一下操作系统的80端口是否被占用
# netstat -tunple | grep 80
# ps aux | grep httpd
-
关闭一下防火墙和selinux
# iptbales -F (flush 刷新)
# setenforce 0
上面两种方式都是暂时关闭
编译安装
-
下载代码
-
上传nginx源码和pcre库源码
注意:a. vsftpd是否开启
# service vsftpd status
# service vsftpd start | stop
b. 防火墙是否关闭
# iptables -L 查看
# iptables -F 关闭(F -- flush)
# service iptables stop 关闭
# service iptables stop 关闭防火墙
c. selinux是否关闭
selinux 是Linux下的一个安全管理软件,由于其安全级别非常高。(建议关闭使用)
# getenforce 查看
# setenforce 0 关闭
注意:这个关闭时基于会话。(只针对当前用户生效)
有时候需要全局生效,对所有的用户全部生效
解决方案:更改配置文件即可
可以使用
# file fileName 查看文件类型
关闭selinux
# cd /etc/selinux/
# ls
# vim config
查看
修改
-
上传文件
-
将源码文件移动到(/usr/local/src/)
# cd /home/NAME
#cp nginx-1.8.0.tar.gz pcre-8.34.tar.gz /usr/local/src/
源码目录:
-
编译安装,pcre库,解压
查看
-
编译安装pcre (不需要指定安装路径)
# ./configure
# make 编译
# make install
-
安装nginx软件
解压
# tar -zxvf nginx-1.8.0.tar.gz
编译安装
# ./configure --prefix=/usr/local/nginx 收集操作的信息(检查c++编译器是否存在)
# make
# make install
安装成功,查看
8. 启动服务
注意:启动的时候需要检查 80 端口是否占用
浏览器查看
注意:没有浏览器的情况下,可以使用
# curl -I http://localhost
-I 响应头
目录简介
注意:一旦这个服务启动,会额外生成很多文件和文件夹
注意:如果服务器启动后,再其次启动会怎么样?
解决方案:关闭或者重启
目录相关:
备份配置文件
查看配置文件内容(格式)
mime.types
ActiveX脚本还有flash
长连接
虚拟主机配置:
目录
httpd段:
安全传输
虚拟主机的配置(基于IP的虚拟主机)
注意:互联网上所有的服务都是基于TCP/IP的链接,然后根据端口区分服务
-
-
输入地址
-
做DNS解析
-
根据IP地址访问主机(建立TCP/IP链接)
-
然后访问端口
-
开始根据协议传递文件(http)
-
服务器端构建响应报文
-
传递
-
浏览器解析
-
浏览器渲染
-
见到信息
-
增加server段配置
-
语法检测
# /usr/local/nginx/sbin/nginx -t
-
重启nginx
注意:nginx的好处在于,重启可以直接不关闭服务器情况下,直接读取配置文件信息。
# /usr/local/nginx/sbin/nginx -s reload 重新加载配置文件,但是不关闭服务
-
创建网站根目录
-
浏览器访问
lnmp搭建
注意:php也能作为一个单独的服务来运行,这种运行的模式叫做php-fpm模式,不在作为Apache一个模块使用。有单独的进程,端口,相当于一个软件运行。
php的fpm运行方式:使得php可以单独的作为一个服务运行,而不用作为一个模块被加载后才能使用。作为独立服务的时候,使用的端口是 9000 端口。nginx请求动态文件和 php-fpm服务通信的时候 使用的协议为 fast-cgi 协议
cgi:common getway interface
-
Linux
-
nginx
-
MySQL(不用)
-
php搭建
php-fpm运行方式搭建
注意:php-fpm需要 php-5.3.12以后的版本默认是支持
之前其他的版本需要打补丁。
-
下载php源码
-
上传(/usr/local/src/)
-
解压和安装
编译
# ./configure --prefix=/usr/local/php --enable-fpm
# make
#make install
修改nginx的配置文件,可以去调用php-fpm方式
-
修改nginx配置文件
php脚本的动态文件目录是自己可以随意的设定的。
-
重新读取配置文件
-s signal 信号 reload 信号
# /usr/local/nginx/sbin/nginx -s reload
-
php-fpm目录查看
注意:直接启动报错,需要知道配置文件信息
解决方案:
-
启动php-fpm模式
查看是否成功启动
-
修改nginx的配置文件,并且重新载入
-
创建动态脚本的访问目录
-
浏览器查看
注意:有一个php.ini配置的问题
解决:去源代码包copy即可
解决现实:
负载均衡器使用
可以去处理web请求,将web请求分发给多个web服务器来响应的软件或者硬件
-
创建两台虚拟主机
基于IP的
81端口
82端口
注意:理论上来说,81主机和82主机的网站根目录里面的内容应该一致。默认是基于轮询的方式
可以修改为基于ip_hash的方法
tengine的搭建使用
tengine是由淘宝发起一个基于nginx的web服务器,做了二次开发
参考文档:http://tengine.taobao.org/book/chapter_05.html
安装
-
下载
-
上传
-
编译安装
-
使用
目录查看
-
启动
注意:检测端口 80
查看
网站根目录
其他命令和nginx完全一样
扩展
-
lnmp搭建相对来说比较复杂
-
中文文档
-
看淘宝的tengine:http://tengine.taobao.org/
-
中文站点:http://www.nginx.cn/doc/
-
tengine 目前在国内的市场很大