Nginx快速入门
一、什么是Nginx?
nginx是一个高性能,高并发的web服务器、Http反向代理服务器。它的作用是可以部署静态web资源, 给应用服务器做反向代理, 并能实现负载均衡。
说到这里, Nginx的核心是反向代理?那什么是反向代理?有反向是不是必定有正向代理?
正向代理
客户端通过代理服务器代理访问应用服务, 这叫正向代理,也就是代理服务器代理的对象是客户端。比如国内的电脑因为某些原因不能访问到goggle,那么这时候就可以通过vpn连到一台可以访问到goggle的代理服务器, 通过这台代理服务器代理访问goggle, 代理服务器访问goggle成功后转回被代理客户端。
反向代理
服务器通过代理服务器代理被客户端访问, 这叫反向代理,也就是反向代理服务器代理的是服务端。
因为一些原因,应用服务器往往不想被外界直接访问, 这时候就可以通过反向代理服务器做代理,客户端的请求先到反向代理服务器, 代理服务器再转发到应用服务器。这样的好处就是对外不直接暴露了真实的应用服务,还可以通过反向代理对请求进行一系列处理后再转到具体应用服务, 比如做负载均衡。
二、Nginx的工作模式
Nginx的工作模式是Master + Works模式, 分为一个Master进程和多个Works进程共同工作。Master进程负责读取配置文件, 以及管理Works进程,Works进程负责处理请求与连接, 其中Works可以有多个同时工作,数量可以在Nginx配置文件配置。一般设为等于cpu的核心数。
正是这种Master + Works模式让Nginx可以实现热部署, 也就是可以实现修改nginx配置后无需重启, 只需要执行nginx -s reload即可完成配置更新, 客户端零感知。它的原理是Master在监听着配置文件更新的指令,接收到配置文件更新的指令,就会以新的配置创建新的Works,然后等待旧的Works把正在处理的请求和链接处理完成之后再kill掉, 最后换上新的Works继续工作。
Nginx还基于Linux的eopll模块实现, 也就是基于事件驱动模型。Works在接收到请求时, 会先把请求加入到事件队列, 而不是马上处理。然后会有另外的线程在遍历事件队列,取出请求进行处理。从而不会产生阻塞现象,支持高并发、高性能处理请求。
三、Nginx配置。
PS: 本文章不具体展开讲解配置, Nginx配置讲解会另起一片文章说明。
配置虚拟主机
通过Server、Location模块即可根据域名,端口。IP配置虚拟主机
配置反向代理
通过location的passproxy即可配置反向代理
配置负载均衡
通过upstream模块即可配置负载均衡
详细可以看我另外一篇文章: https://blog.csdn.net/qq_16148137/article/details/99695653
四、Nginx实现高可用
Nginx可以用于做负载均衡, 所有流量都会先通过Nginx在转发到后端服务器。这样一来, 如果Nginx只有一个实例的话,那么也会造成单点故障。解决方案就是要做双机热备, 可以通过Keepalived + Nginx 或 LVS + Keepalived + Nginx来实现高可用web架构。其中比较关键的是Keepalived ,它的作用是对Nginx的运行状态进行健康检查,一旦出现“主”节点挂了, 能自动切换至“从”节点。