nginx
nginx的作用
- 保护真实web服务器,不直接暴露接口给前端,保证了web服务器的资源安全
- 节约有限的IP地址资源
企业内所有的网站共享一个在internet中注册的IP地址,分配私有地址,节约公网IP - 减少web服务器的压力,提高响应速度
在外部网络和web服务器之间增加了一个高速的web缓冲服务器,也就是nginx服务器。
后台服务分布式情况下,nginx服务器可以对请求进行负载均衡,把请求压力分发给多台web服务器,降幅服务器压力。
在web服务器响应请求后把内容返回给nginx服务器,nginx服务器再把响应内容返回给用户。同时nginx服务器把内容保存在本地,再次接受同样的信息请求后,nginx服务器直接把本地缓存内容返回,提高了请求响应速度。 - 请求同一控制。可以设置权限、过滤规则等等。
- 把前端部署在nginx服务器,nginx区分动静态数据,提前缓存静态资源,加快页面加载速度
- 可以解决ajax请求跨域问题
nginx优点
模块化、事件驱动、异步、非阻塞、多线程单进程
nginx原理
nginx启动后会启动一个master进程和多个worker进程
master进程不接受请求,不处理事件,它的工作是读取验证配置文件nginx.conf、管理worker进程、实现重启nginx服务、平滑升级、更换日志、更换配置。
例如热部署更换配置:master收到kill -HUP pid或者nginx0.8版本之后的./nginx -s reload时,向旧的worker进程发送信号,并创建新的worker进程。此时,旧的worker进程不接受新的事件请求,把已有的事件处理完成之后就退休,新的worker进程创建后就开始接替旧的worker进程开始工作。
多个worker进程竞争请求,请求只被一个worker进程处理,使用类似互斥锁的实现accept_mutex。每个worker进程维护一个线程(避免线程上线文切换耗费资源),处理连接和请求,一般worker进程个数与CPU个数有关,有利于进程的切换。
Nginx采用Linux的epoll模型,基于事件驱动,同时监控多个事件。
nginx服务器高可用
keepalived+nginx实现高可用
请求不直接发送到Nginx上,而是先通过keepalived(虚拟IP)接受请求,然后将请求通过负载均衡策略发给多台分布式Nginx服务器中的一台。其中keepalived监控nginx服务器生命状态,实现高可用。