网站首页 > 技术教程 正文
前言
作为业界知名的高性能服务器,被广大互联网公司应用,阿里的 Tegine 就是基于 Nginx 开发的。
Nginx 基本上都是用来做负载均衡、反向代理和动静分离。目前大部分公司都采用 Nginx 作为负载均衡器。作为 LBS,最基本的要求就是要支持高并发,毕竟所有的请求都要经过它来进行转发。
Nginx这样做的目的主要是将数据的承载量分摊到多个服务器上进行执行,这只是在服务基础设施上提高性能的优化手段之一。从下面图就可以看出:
Nginx 主要特点
- nginx模块结构:
 
- Nginx主要是用于Http服务器,反向代理服务器,邮件服务器
 - Nginx由多个模块组成,每个请求的完成都是由一个或多个模块共同完成的。
 - Nginx 默认采用守护模式启动,守护模式让master进程启动后在后台运行。在Nginx运行期间主要由一个master主进程和多个worker进程(数目一般与cpu数目相同)
 - master主进程主要是管理worker进程,对网络事件进行收集和分发:
 
- 接收来自外界的信号
 - 向各worker进程发送信号
 - 监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程
 
- nginx用一个独立的worker进程来处理一个请求,一个worker进程可以处理多个请求:
 - 当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接。
 - 一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。采用这种方式的好处:
 - 节省锁带来的开销。对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查上时,也会方便很多
 - 独立进程,减少风险。
 - 采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。
 - 在一次请求里无需进程切换
 
- Nginx主要通过加锁来解决惊群现象
 - 惊群现象:惊群效应就是当一个fd的事件被触发时,所有等待这个fd的线程或进程都被唤醒。一般都是socket的accept()会导致惊群,很多个进程都block在server socket的accept(),一但有客户端进来,所有进程的accept()都会返回,但是只有一个进程会读到数据,就是惊群。
 - Nginx 采用accept-mutex来解决惊群问题:当一个请求到达的时候,只有竞争到锁的worker进程才会惊醒处理请求,其他进程会继续等待,结合 timer_solution 配置的最大的超时时间继续尝试获取accept-mutex
 - Nginx的IO通常使用epoll,epoll函数使用了I/O复用模型。与I/O阻塞模型比较,I/O复用模型的优势在于可以同时等待多个(而不只是一个)套接字描述符就绪。Nginx的epoll工作流程如下:
 - master进程先建好需要listen的socket后,然后再fork出多个woker进程,这样每个work进程都可以去accept这个socket
 - 当一个client连接到来时,所有accept的work进程都会受到通知,但只有一个进程可以accept成功,其它的则会accept失败,Nginx提供了一把共享锁accept_mutex来保证同一时刻只有一个work进程在accept连接,从而解决惊群问题
 - 当一个worker进程accept这个连接后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完成的请求就结束了
 - Nginx最大连接数:
 - worker_processes:worker角色的进程个数
 - worker_connections:每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)
 - Nginx作为http服务器的时候:max_clients = worker_processes * worker_connections
 - Nginx作为反向代理服务器的时候:max_clients = worker_processes * worker_connections/4 (/4原因:因为浏览器默认会开启2个连接到nginx server,而且nginx还会为每个连接使用fds(file descriptor)从连接池建立connection到upstream后端。)
 - Nginx主要通过nginx.conf文件进行配置使用。在nginx.conf文件中主要分为:
 - 全局块:一些全局的属性,在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等
 - event块:参考事件模型,单个进程最大连接数等
 - http块:设定http服务器
 - server块:配置虚拟主机
 - location块:配置请求路由及页面的处理情况等
 
Nginx 常用功能
- Nginx支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
 - Nginx作为Http代理、反向代理:
 - Nginx通过配置实现灵活的转发功能:Nginx可以根据不同的正则匹配,采取不同的转发策略。
 - Nginx可以对返回结果进行错误页跳转,异常判断等。
 - 如果被分发的服务器存在异常,它可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
 
- Nginx作为负载均衡器:
 - Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
 - 内置策略为轮询,加权轮询,Ip hash。
 - 扩展策略由第三方实现。
 - 轮询与加权轮询:
 
- Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
 
- Nginx作为Web缓存
 - 可以把静态资源放在Nginx服务器上(比如前端页面资源)
 - Nginx可以对不同的文件做不同的缓存处理,配置灵活。
 - 配合着第三方的ngx_cache_purge,对指定的URL缓存内容可以的进行增删管理。
 
Nginx 基本使用
1、安装Nginx:(安装教程网上很多,这里就不展开了)
2、配置Nginx:修改nginx.conf文件
3、使用Nginx命令启动Nginx:
- sudo nginx 启动Nginx
 - nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
 - nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
 - nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。
 - nginx -s reopen 重新打开日志文件。
 - nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。
 - nginx -t 不运行,而仅仅测试配置文件。Nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
 - nginx -v 显示 Nginx 的版本。
 - nginx -V 显示 Nginx 的版本,编译器版本和配置参数。
 
-s:把信号发给Nginx的master进程
linux服务器开发架构师,Nginx必用的一些知识点
一:反向代理Nginx
nginx开发介绍
项目:反向代理负载均衡配置详解
项目:自定义协议upstream开发
项目:子域名映射
项目:服务器后台攻击预防
项目:Nginx双虚拟主机
二:Nginx源码
Nginx基础架构
HTTP架构
进程间的通信机制
Nginx高级数据结构
slab共享内存
upsteram机制设计
三:Nginx集群
Nginx的实现原理
经典应用原理
高可用方案的实现机制
lvs与Nginx集群
推荐几个Nginx学习视频:
手把手实现Nginx模块开发
Nginx源码线程池的实现
Redis到memcached再到Nginx
学习资料后台私信 :1 更多linux技术欢迎大家一起交流。
猜你喜欢
- 2024-10-16 Nginx 多进程高并发、低时延在滴滴缓存代理中的应用
 - 2024-10-16 互联网大厂使用Nginx为什么快到根本停不下来?
 - 2024-10-16 入门到“放弃”:Nginx为什么快到根本停不下来?
 - 2024-10-16 Nginx为什么快到根本停不下来?(为什么使用nginx)
 - 2024-10-16 Nginx 之大并发服务器架构实战技法三
 - 2024-10-16 Nginx 为什么这么快?(nginx干啥用的)
 - 2024-10-07 NGINX支持超大文件HTTP断点续传(qq邮箱超大附件最大能发多少g的文件)
 - 2024-10-07 nginx 如何限制访问频率,下载速率和并发连接数.md
 - 2024-10-07 漫画 | 一台Linux服务器最多能支撑多少个TCP连接?
 - 2024-10-07 TCP 半连接队列和全连接队列满了,怎么破?
 
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
 - 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
 - 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
 - 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
 - 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
 - 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
 - 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
 - 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
 
- 最近发表
 - 
- Excel计算工龄和年份之差_excel算工龄的公式year
 - Excel YEARFRAC函数:时间的"年份比例尺"详解
 - 最常用的10个Excel函数,中文解读,动图演示,易学易用
 - EXCEL中如何计算截止到今日(两个时间中)的时间
 - 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
 - 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
 - Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
 - 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
 - Excel日期函数之DATEDIF函数_excel函数datedif在哪里
 - Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
 
 
- 标签列表
 - 
- 下划线是什么 (87)
 - 精美网站 (58)
 - qq登录界面 (90)
 - nginx 命令 (82)
 - nginx .http (73)
 - nginx lua (70)
 - nginx 重定向 (68)
 - Nginx超时 (65)
 - nginx 监控 (57)
 - odbc (59)
 - rar密码破解工具 (62)
 - annotation (71)
 - 红黑树 (57)
 - 智力题 (62)
 - php空间申请 (61)
 - 按键精灵 注册码 (69)
 - 软件测试报告 (59)
 - ntcreatefile (64)
 - 闪动文字 (56)
 - guid (66)
 - abap (63)
 - mpeg 2 (65)
 - column (63)
 - dreamweaver教程 (57)
 - excel行列转换 (56)
 
 

本文暂时没有评论,来添加一个吧(●'◡'●)