一、I/O模型------Input/Output模型
1.同步/异步
A程序需要调用B程序的某一个功能,A发送一个请求需要B完成一个任务
同步:B不会主动去通知A是否完成需要A自己去问
异步:B会主动通知A是否完成
2.阻塞/非阻塞
A发送一个请求需要B完成一个任务
阻塞:B在完成A的任务前不能执行其他任务
非阻塞:B在完成A的任务前可以同步进行其他任务
3.同步异步/阻塞非阻塞组合
同步阻塞:烧水壶如果水没烧好前,我的人不能离开
同步非阻塞:烧水壶如果水没烧好前,我可以离开一会儿,需要时不时的回来看水有没有烧开
异步阻塞:烧水壶可以提醒我水烧开了,但是我还是要时不时回来看一下水有没有烧开
异步非阻塞:烧水壶可以提醒我水烧开了,我可以在烧水的同时,可以去做其他的事情
二、Nginx用法
nginx -s reopen #日志分割
nginx -s reload #重新加载Nginx配置文件
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令
nginx -v------查看版本信息
nginx -V------查看编译信息
nginx -s------发送信号(kill -l查看信号)
nginx -t------检查语法nginx -g------使用选项后的配置,不使用配置文件里的内容
ps aux|grep nginx
systemctl start/stop/status nginx
nginx -g "user cxk"
nginx -g 'daemon off;' 前台运行命令
三、Apache
1.Apache的三种工作模式
Prefork------多进程
Worker------多线程
Event------基于异步I/O模型
2.apache 功能
提供http协议服务
多个虚拟主机:IP、Port、FQDN 用一台 物理服务器搭建多个网站 百度 jd 淘宝
CGI:Common Gateway Interface,通用网关接口,支持动态程序
反向代理
负载均衡
路径别名
丰富的用户认证机制:basic,digest
支持第三方模块
3.apache优化
监听地址 、隐藏版本号、定义别名、虚拟主机
四、Nginx介绍
(一)I/O模型
Select 会轮询遍历所有的事件集合,其次遍历的事件个数有限制;
Epoll 只会遍历已准备好的事件集合,事件个数无限制。
Linux系统默认的模型是Epoll
(二)nginx优化
1.隐藏版本号或修改版本
2.修改启动进程数
worker_processes auto;
#如果设置为auto 就是你真实的cpu数量
启动进程数按照服务器的cpu个数启动
3.cpu与work 进程 绑定
worker_cpu_affinity 00000001 00000010 00000100 00001000;第0号---第3号CPU
#序号绑定cpu 亲缘性
4.调试work进程打开文件个数
worker_rlimit_nofile 65536;
#所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致
5.http设置
①server块构建虚拟主机 实际只有1台, 好像有多台主机
②alias 别名
③location去匹配
#匹配优先级从高到低 =, ^~, ~/~*, 不带符号
④access 模块 四层控制
⑤自定义 错误页面
⑥日志位置存放 日志分割
⑦检测文件是否存在
⑧长连接
⑨作为下载服务器配置
(三)nginx应用程序方面的优化
①nginx应用程序配置文件优化
②nginx应用程序的配置文件安全优化:
③nginx的日志分割
编写日志分割脚本+crontab 周期性做日志管理
五、nginx的应用场景
1、可以做web服务器 ,nginx是一个http服务,可以独立地提供http服务,可以做静态服务器;
2、虚拟主机 。可以实现一台服务器,虚拟多个站点,例如基于ip、不同端口、或者不同域名的站点
3、反向代理服务器,负载均衡 。当网站的访问量达到一定的程度时,单台服务器就不能满足用户的请求,此时需要多台服务器集群,此时可以使用nginx做反向代理,并且多台服务器可以平均分担负载,不会让某台服务器负载高或者闲置。(也可以使用ip hash技术 进行负载均衡分配)
4、nginx中还可以配置安全管理 ,比如支持nginx搭建API接口网关,对每一个接口服务进行拦截
5、nginx还能做缓存服务器
六、nginx为什么能支持高并发
最核心的原因:nginx是异步,非阻塞,使用epoll ,和并且可以进行简单的配置细节优化。
假设一个server采用一个进程(或者线程)负责一个请求的方式,那么进程的数量就是并发的数量,那么会有很多进程在等待中,等待网络的传输,非常耗时耗资源。
但是nginx是使用了异步非阻塞的程序运行方式,解决了等待浪费时间的痛点,有一个专门进行调度进程,每次有一个request请求,就可以分配给worker进程去进行处理,web server 的工作性质决定了每个request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。
七、 status:状态码,status code
三位数字,1xx,2xx, ..., 5xx 标明请求处理过程的结果状态;
1xx:100-101, 信息提示;
2xx:200-206,成功类的响应码,例如200;
3xx:300-305,重定向类的响应码,例如301(永久重定向), 302(临时重定 向), 304(资源没修改,对客户端缓存而言)等;
4xx:400-415, 错误类信息,客户端错误,例如 401(认证质询), 404(访问资源不存在), 403(无权限)等;
5xx:500-505, 服务器端错误 ,例如500(服务器内部错误),502(bad gateway)等**;**