国外主流还是使用apache;国内现在主流是nginx(并发能力强,相对稳定)
nginx:高性能、轻量级的web服务软件
特点:
1.稳定性高(没apache稳);
2.系统资源消耗比较低;处理http请求的并发能力非常高,单台物理服务器可以处理3-5万个并发请求
一般在企业中,为了保持服务器的稳定,并发量会设置在2万个左右;占用内存2M左右,keep-alive在3M左右
nginx的主要功能:
1.静态文件服务,nginx可以直接提供静态文件的服务,HTML,CSS,JavaScript,图片等,能够高效的处理并且响应静态文件的请求
2.反向代理:可以作为反向代理的服务器,将客户端的请求转发给后端多个服务器,可以实现负载均衡,高可用。提高整个集群的性能,以及可靠性
3.处理动态内容,nginx不能直接处理动态请求,需要依靠后端能够处理的应用php node.js java python nginx可以代理请求,发送到后端的动态服务处理,动态服务器处理完之后,nginx来吧动态请求,响应给客户端
4.SSL/TLS加密,HTTPS的加密方式,数字证书验证机制
5.虚拟主机,nginx可以在一台服务器上设置多个虚拟主机,同一个服务器上可以有多个域名和站点
6.URL重定向,可以实现灵活的url重写和重定向
7.缓存功能,nginx自带缓存功能;get可以获取缓存,post不能获取缓存
8.日志功能,可以详细的记录请求的信息,包括访问时间、请求路径IP地址、响应状态、有助于故障排查
系统控制的日志,记录在/var/log/messages 业务日志:access.log、error.logaccess.log 记录了访问成功的记录error.log 记录了访问失败的记录
正向代理:
***反向代理:
核心:客户端在请求时通过代理服务器,会把请求流量按照轮询算法,转发到后台不同的服务器,实现负载均衡和高可用
缓存
nginx的主要应用场景:
1.静态服务2.反向代理、负载均衡3.缓存服务4.动态服务
***nginx是如何实现高并发的?
1. nginx自身代码的问题:大量的底层代理进行了优化,同时自带了一个功能模块——epoll模块,可以支持高并发
2. nginx也是一个master进程控制多个work进程,master负责收集和分发请求,work是实际执行者;每一个请求进来时,master就会拉起一个work进程来处理请求同时,master进程也负责监控work的状态;worker的数量和cpu要一致或者是cpu的2倍worker处理请求的过程中,只收内存大小的限制,所以可以处理多个请求;再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身很少,所以可以起到大并发处理的能力两者之间相互依赖,相互补充
conf 保存的是所有nginx的配置文件,其中最核心的就是nginx.conf
html 保存nginx的web文件,这个木里是默认的目录,可以改
50x.html 是nginx默认的错误页面的提示logs 保存日志文件的位置
sbin nginx二进制的启动脚本,可以结合不同的参数来进行使用nginx -t 检查配置文件是否配置正确
nginx -v 查看nginx的版本号
nginx -s 向主进程传输信号,停止、开启、重启、重新加载
nginx -c 设置配置文件的默认路径nginx -s stop
nginx -s start
nginx -s reload
信号符:
信号符结合kill命令:
kill -USR1 pid号 #日志分割
kill -s HUP pid号 #kill后只能跟pid号,重新加载
killall -s HUP nginx #killall后可以跟服务名,也可以用pid号
kill -s QUIT pid号 #优雅退出,有人访问时不会结束进程,访问完后再结束进程
kill -s WINCH pid号 #优雅地结束worker,直到请求完成才会结束worker进程
必须要epel源(工作中一般不用yum安装)
yum install -y epel-release
yum install nginx -yworker_processes 1; #工作进程,也就是worker进程的数量,一般是配置成cpu数一致,或者2倍; 一般来说小网站设置成1就足够了worker_connections 1024 #每个进程可以处理的最大连接数,默认为1024
***如何修改linux服务器文件的最大打开数量
ulimit -n 65535 #临时修改;65535为linux最大可打开数量
vim /etc/security/limits.conf# 65535 为Linux系统最大打开文件数* soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535
#永久修改,需要重启linux才能生效ulimit -a
usr/local/nginx/conf/nginx.conf #配置文件
event块
http块
server块可以配置虚拟主机的相关参数,一个http模块中可以有多个server块
location块匹配的是URI(域名后面的地址)
***#location / 表示 /usr/local/nginx/html
root 拼接;root指定的目录和location匹配的url之间做一个拼接,/opt/ky30/这两个路径都要真实存在,而且都是目录,并且在url目录里要有web文件alias 匹配指定路径下的web文件/root后面有没有 / 无所谓;alias加了 / ,后面也必须有 / ,否则匹配不到root标签可以使用重定向
alias标签不可以设置重定向
全局块 全局生效,所有模块,所有用户都生效
events 影响服务器和用户的网络连接问题
http 主要模块,配置代理、缓存、虚拟主机、方向代理、只能是http的请求才能写入 http模块中;upstream #反向代理指定服务器的命令
server块 包含在http模块当中,不能单独设置
location块 匹配uri,包含在server当中,也不能单独设置porxy_pass #反向代理upstream 七层,基于IP和端口,走http协议,所以只能在http模块中
stream 四层,走的是tcp或者udp流量,不能写在http当中,写在全局配置
实验:
一、访问状态统计
1:
1:经过三次握手的
1:处理的请求数
二、基于用户名和密码的访问控制
三、基于IP地址的访问规则
四、虚拟主机,创建多个虚拟主机
基于一个服务器,创建多个主页
nginx -t