配置好了OpenResty之后,访问服务器公网ip就显示OpenResty欢迎页
就说明你这台服务器已经配置好了OpenResty,可以抵挡百万级的请求
项目中哪里用了nginx
- 广告的一级缓存
- 一级限流,抵挡大量请求
- 秒杀时进入秒杀列表页和秒杀详情页都需要先经过OpenResty,抵挡这时候的高并发请求(因为这些详情页都放在OpenResty指定的位置)
- 通过lua脚本实现用户登陆前,在openresty被拦截,判断当前要秒杀的商品是不是还有库存,如果没有库存就不让他访问了。
- 秒杀时如果有库存,判断用户是否登录,如果没登陆就转到OAuth2.0认证登录
nginx原理
使用了管理进程+工作进程的设计
- 管理进程为工作进程的父进程,负责外部指令的接收,工作进程状态的监管,负载均衡等
- 工作进程负责客户端请求的处理和响应,工作进程一般按照CPU核数配置并且和处理器一一绑定,降低进程间切换的开销,一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其他进程的请求
- 每个worker接收请求的方式为io多路复用,使用epoll,每个worker都维护一个epoll句柄
- worker负责接待客户端的请求,master就是监工
- master进程创建之后,会建立好需要监听的的socket,然后从master进程再fork出多个worker进程。
nginx使用互斥锁来保证只有一个workder进程能够处理请求,拿到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接,然后解析、处理、返回客户端
nginx多进程模型的好处
每个worker进程都是独立的,不需要加锁,节省开销
每个worker进程都是独立的,互不影响,一个异常结束,其他的照样能提供服务
nginx应用场景
Http服务器(Web服务器)
- 性能非常高,非常注重效率,能够经受高负载的考验。支持50000个并发连接数,不仅如此,CPU和内存的占用也非常的低,10000个没有活动的连接才占用2.5M的内存。
- 反向代理服务器
- 正向代理服务器就是我们平时翻墙用的代理服务器
- 浏览器客户端发送请求到反向代理服务器(比如Nginx),由反向代理服务器选择原始服务器提供服务获取结果响应,最终再返回给客户端浏览器
- 负载均衡服务器
动静分离:在商城项目中,将静态页放在nginx规定的地址,就是动静分离
nginx负载均衡
轮询:把请求轮流发送到每个服务器上;
- 加权轮询:根据服务器的性能差异,为服务器赋予一定的权值,性能高的服务器分配更高的
权值; - 最少连接:将请求发送给当前连接数最少的服务器上;
- 加权最少连接:在最少连接的基础上,根据服务器的性能为每台服务器分配权重,根据权重
计算出每台服务器能处理的连接数; - 随机算法:与轮询算法类似,适用于服务器性能差不多的场景;
- 源地址哈希法:通过对客户端IP计算哈希值之后,对服务器数量取模,得到目标服务器的序号。