Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。在之前部署上一个项目配置Nginx的过程中,很多操作并不熟悉,感觉只是做一步查一步,对于真正的用法和原理并没有深究,本文记录了最近对于Nginx的进一步学习的笔记,图片和部分内容来源网络。
下图基本上说明了当下流行的技术架构,其中Nginx有点入口网关的味道。
接下来需要区分清楚正向代理和反向代理的区别。
正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。
反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
启动Nginx后,其实就是在80端口启动了Socket服务进行监听。
Nginx采用Master-Worker模式
nginx.conf
;上文基本描述了Nginx如何处理具体的请求。接下来考虑下一个深入一步问题:
Nginx采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。worker只需要从epoll队列循环处理即可。
思考:Nginx如果挂了怎么办?
Nginx既然作为入口网关,很重要,如果出现单点问题,显然是不可接受的。
一般的处理是使用进程管理工具守护进程。
题外话:
本站并未对Nginx采用进程守护
但对后端服务器通过pm2守护进程并使用监听模式
监听模式启用后,编辑后端时,对应常采取的方式是VSCode远程编辑后端代码,每次更新都会自动刷新,存在的小问题是每次编辑都会刷新后端的缓存,所有的session都会失效,可以用持久化存储解决这个小问题(在后端代码之前的版本里启用了持久化存储到文件里,后来看着文件太多心烦就注释了),但我也只有自己一个用户,影响不大
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能
之后将会在操作篇进入对Nginx配置的实际操作学习。