- Nginx是什么?
Nginx是一个高性能的HTTP和反向代理web服务器,核心特点是占有内存少,并发能力强。
Nginx的应用场景?
- Http服务器(web服务器)
性能非常高,非常注重效率,能够经受高负载的考验。
支持50000个并发连接数,不仅如此,CPU和内存的占用也非常低,10000个没有活动的连接才占用2.5M的内存。
反向代理服务器
- 正向代理
在浏览器中配置代理服务器的相关信息,通过代理服务器访问目标网站,代理服务器收到响应后,会把相应信息返回给我们自己的浏览器客户端。
- 反向代理
浏览器客户端发送请求到反向代理服务器(比如Nginx),由反向代理服务器选择最终服务器提供服务获取响应结果。
- 正向代理
负载均衡服务器
当一个请求到达,Nginx反向代理服务器去寻找原始服务器提供服务的过程叫做反向代理。但是当原始服务器有多台的时候,找哪一台服务器提供服务,这样一个寻找的过程就叫做负载均衡。
upstream配置在http里面server外面
默认轮询
upstream myfServer{ server 111.229.248.243:8080; server 111.229.248.243:8082; } location /abc { proxy_pass http://myfServer/; }
weight权重
upstream myfServer{ server 111.229.248.243:8080 weight=1; server 111.229.248.243:8082 weight=2; }
ip_hash
upstream myfServer{ ip_hash; server 111.229.248.243:8080; server 111.229.248.243:8082; }
动静分离
location /static{ root /Users/zgx/CodeFile/; index index.html; }
上面的真实访问路径是/Users/zgx/CodeFile/static/index.html 会有一个static加到文件路径中
location /static{ alias /Users/zgx/CodeFile/static/; index index.html; }
使用alias不使用root,真实访问路径/Users/zgx/CodeFile/static/index.html
- Http服务器(web服务器)
Nginx特点
- 跨平台:Nginx可以在大多数类Unix操作系统上编译运行,而且也有Windows版本。
- Nginx的上手非常容易,配置也比较简单。
- 高并发,性能好。
- 稳定性也特别好,宕机概率很低
- Nginx安装(看文档)
Nginx主要命令
- ./nginx 启动Nginx
- ./nginx -s stop 终止Nginx(也可以使用kill -9杀掉Nginx进程)
- ./nginx -s reload 重新加载Nginx.conf配置文件
Nginx核心配置文件解读
Nginx的核心配置文件conf/nginx.cong包含三块内容:全局块、events块、http块
- 全局块
从配置文件开始到events块之间的内容,此处的配置影响Nginx服务器整体的运行,比如worker进程的数量、错误日志的位置等。
- events块
events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个workderprocess⽀持的最⼤连接数为1024
- http块
http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等
- 全局块
Nginx底层进程机制剖析
Nginx启动后,以daemon(关掉shell后不关闭)多进程方式在后台运行,包括一个Master进程和多个Worker进程。
master进程
主要管理worker进程
- 接收外界信号和向各worker进程发送信号(./nginx -s reload)。
- 监控worker进程状态,当worker进程异常退出后Master进程会自动重新启动新的worker进程。
- worker进程
worker进程具体处理网络请求。多个worker进程之间是对等的。他们同等竞争来自客户端的请求,各进程之间是相互独立的。
以./nginx -s reload来说明Nginx信号处理这部分
- -s代表发出一个信号,内容为reload。
- master进程对配置文件进行语法检查。
- 尝试根据配置文件进行配置。
- 尝试成功则使用新的配置,新建worker进程。
- 新建成功,给旧的worker进程发送关闭消息。
- 旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭。
worker进程处理请求部分说明
例如我们监听9003端口,一个请求到来,如果有多个进程,那么每个worker进程都有可能处理这个链接。
- master进程创建之后,会建好需要监听的socket,然后再从master进程再fork出多个worker进程。所以,所有的worker进程的监听描述符listenfd 在新连接到来时变的可读。
- Nginx使用互斥锁来保证只有一个worker进程能够处理请求,拿到互斥锁的进程注册listenfd读事件,在读事件里调用accept接收该连接,然后解析、处理、返回客户端。
Nginx多进程模型的好处
- 每个worker进程都是独立的,不需要加锁,节省开销。
- 每个worker进程都是独立的,互不影响,一个进程异常,其他进程依旧可以提供服务。
- 多进程模型为reload热部署机制提供了支撑。