lnmp最常见的架构
L linux --系统平台
N nginx --网站的前端程序,发布静态页面和调用外部程序解析动态页面
M mysql --网站的后台数据库
P PHP --网页的变成语言(也可以用python)
工作原理
客户端的所有的页面请求先到达lnmp结构中的nginx
nginx根据自己的判断哪些是静态页面,哪些是动态页面
如果是静态页面直接由nginx自己处理就可以返回结果给客户端了
如果*.php动态页面nginx需要调用php中间件服务器来处理
在处理PHP页面的过程中可能需要调用mysql数据库中的数据完成页面编译
编译完成后的页面返回给nginx,nginx再返回给客户端
nginx
ngin是http服务器软件,nginx的特点是处理速度非常快,占用的资源很少。功能上nginx模块全部是静态编译的,也就是说如果需要处理动态的编译需要安装其他软件来完成动态的编译
nginx的的优势
作为web服务器处理静态文件,索引文件,自动索引的效率非常高
作为代理服务器,可以实现无缓存的反向代理,提高网站运行速度
作为负载均衡服务器,可以在内部直接支持rails和php等
性能方面,采用epoll模型,可以支持多并发并且占用低内存
稳定方面,采取分段资源分配技术,CPU和内存占用率非常低,少量的dos攻击对nginx基本无作用,
高可用方面,支持热部署,启动迅速,可以在不间断服务的情况下,直接升级7x24小时不间容灾
nginx的模块和工作原理
nginx由内核和模块组成,模块结构分为核心模块,基础模块,第三方模块
核心模块: http模块,event模块,mail模块
基础模块: http fastCGI模块,http proxy模块,http rewrite模块
第三方模块: http upstream request hash 模块,notice模块,htttp access key 模块
模块从功能上分为如下三类:
Handlers(处理器模块):直接处理请求,并进行输出内容和修改headers信息操作只有一个
Filters(过滤模块):主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出案例故障汇总
Proxies(代理类模块):主要与后端一些服务比如FastCGI进行交互,实现代理和负载均衡
在工作方式上:
单工作进程(默认):除主进程外,还有一个工作进程
多工作进程:每个进程包含多个线程
nginx模块之间被编译金nginx,因此属于静态编译方式,然后将模块编译为一个so文件,在配置文件中指定是否加载
nginx模块的HTTP请求和响应过程图如下:
nginx进程理解 分发
nginx进程
nginx启动后。在linux系统中以Daemon的方式在后台运行,后台进程包含一个master进程和多个work进程,默认以多进程方式
master管理work 外界的信号都是发给master,再由master分配给work进程
master进程
管理work进程
外界的信号都是发给master,再由它分配给work进程
监控work的运行状态,如发生异常,重新启动新的进程
work进程
work之间是对等的
基本的网络请求都是在work中进行
一个请求只能在一个work进程中进行
一个work进程也不能处理其他进程的请求
work进程的个数是可设置的,一般跟CPU核数相同
master进程主要用来管理worker进程,具体包括如下4个主要功能
接收来自外界的信号
向各worker进程发送信号
监控woker进程的运行状态
当woker进程退出后(异常情况下),会自动重启新的woker进程
woker进程主要用来处理网络时间,各个woker进场之间是对等且相互独立的,他们同等竞争来自客户端的请求,一个请求只可能在一个worker进程中处理,woker进程个数一般设置为机器CPU核数
nginx安装 一种是源码安装 一种是rpm包安装
首先看看源码安装 http://nginx.org
yum -y install pcre-devel zlib-devel <pcre可以使nginx支持http-rewrite模块> tar xvf nginx-1.11.0.tar.gz cd nginx-1.11.0 ./configure --with-http_stub_status_module --prefix=/usr/local/service/nginx --with-http_gzip_static_module make && make install --with-http_stub_status_module 可以启动nginxstatus功能,以监控nginx当前状态
利用TCMalloc优化nginx的性能 扩张知识
TCMalloc是谷歌的开源工具google-perftools的成员,它可以在内存分配效率和速度上高很多,可以很大程度提高服务器在高并发情况下的性能,从而降低系统的负载
1.安装libunwind库,libunwind-0.99-alpha.tar.gz
`tar xvf cd ./configure maek make install
2.安装google-perftools
tar xvf gperftools-2.1.tar.gz
cd ./config make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
至此,google-perftools安装完成
nginx启动与关闭
#检查语法
/usr/loacal/service/nginx/sbin/nginx -t
#平滑重启
/usr/local/service/sbin/nginx -s reload
#不间断服务器重启,将pid行程重跑(restart)
kill -HUP
cat /opt/nginx/logs/nginx.pid
关闭
kill 进程号
nginx定时切割日志脚本
1.创建脚本 /usr/local/service/nginx/sbin/cut_nginx_log.sh
cd /usr/local/service/nginx/logs /bin/mv access.log access_$(date+%F -d -1day).log /usr/local/service/nginx -s reload
添加到定时任务
crontab -e #添加以下代码
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx #每天凌晨定时执行脚本
crontab -e
30 19 * * * /bin/sh cut.nginx.log > /dev/null 2>&1 每天19点30分执行一次