Nginx 简述
Nginx 是一个开源的且高性能、可靠的 HTTP 中间件、代理服务。
选择 Nginx 原因
IO 多路复用 epoll
多个描述符的 I/O 操作都能在一个线程内并发交替地顺序完成,这就叫 I/O 多路复用,这里的“复用”指的是复用同一个线程。
什么是 epoll
IO 多路复用的实现方式 select、poll、epoll
- select 缺点
能够监视文件描述符的数量存在最大限制
线性扫描效率低下 - epoll 模型
1)每当 FD(文件描述符)就绪,采用系统的回调函数之间将 FD 放入,效率更高。
2)最大连接数无限制
轻量级
功能模块少
代码模块化
CPU 亲和(affinity)
什么是 CPU 亲和
是一种把 CPU 核心和 Nginx 工作进程绑定方式,把每个 worker 进程固定在一个 cpu 上执行,减少切换 cpu 的 cache miss,获得更好的性能。
为什么需要 CPU 亲和
Nginx 正是利用了 cpu 的亲和来提升并发处理能力和减少不必要的额外性能损耗。当今服务器一般都是多 cpu 多核心的,nginx 作为接入层的中间件,他对于 cpu 的亲和就尤为重要,nginx 是由多个不同的 worker 的进程进行处理,假设有一台双 cpu 的服务器,每个 cpu4 个核心,把 8 个 worker 进程分别绑定到不同 cpu 核心上,这样均匀的分配,就能降低因 cpu 自动切换时的性能损失,
###sendfile 零拷贝
nginx 在处理静态文件方面非常有优势,因为其采用 senfile 运作方式
对比原来的 HttpServer 方式,当我们请求一个静态文件时,它会经过内核空间和用户空间,最终到达 socket,通过 socket 响应给用户。对于一台服务器操作系统会发生多次切换(内核空间到用户空间之间)。
因为静态文件不需要过多的用户空间的逻辑处理,可以直接传输。 Linux2.1 引入 sendfile 技术,sendfile 正是运用这种零拷贝传输模式,即文件的传输只通过内核空间传递给 socket 响应给用户。所以在 cdn 服务或动静分离的静态文件处理方面 nginx 会比其他服务性能高很多。
##安装目录简介
对于 yum 这种基于 RPM 包管理的软件包管理器安装的软件,可以使用 rpm -ql nginx 来查看指定软件(如 nginx)的所有文件目录,如下:
主要目录介绍:
路径 | 类型 | 作用 |
---|---|---|
/etc/logrotate.d/nginx | 配置文件 | Nginx 日志轮转,用于 logrotate 服务的日志切割 |
/etc/nginx /etc/nginx/nginx.conf /etc/nginx/conf.d /etc/nginx/conf.d/default.conf |
目录、配置文件 | Nginx 主配置文件 |
/etc/nginx/fastcgi_params /etc/nginx/uwsgi_params /etc/nginx/scgi_params |
配置文件 | cgi 相关,fastcgi 配置 |
/etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf |
配置文件 | 编码转换映射转化文件 |
/etc/nginx/mime.types | 配置文件 | 设置 http 协议的 Content-Type 与扩展名对应关系 |
/usr/lib/systemd/system/nginx-debug.service /usr/lib/system/nginx.service /etc/sysconfig/nginx /etc/sysconfig/nginx-debug |
配置文件 | 用于配置出系统守护进程管理器管理方式 |
/usr/lib64/nginx/modules /etc/nginx/modules |
目录 | Nginx 模块目录 |
/usr/sbin/nginx /usr/sbin/nginx-debug |
命令 | Nginx 服务的启动管理的终端命令 |
/usr/share/doc/nginx-1.12.0 /usr/share/doc/nginx-1.12.0/COPYRIGHT /usr/share/man/man8/nginx.8.gz |
文件、目录 | Nginx 的手册和帮助文件 |
/var/cache/nginx | 目录 | Nginx 的缓存目录 |
/var/log/nginx | 目录 | Nginx 的日志目录 |
location 查找顺序
总结:
location 的命中过程是这样的
1:先判断精准命中,如果命中,则立即返回结果并结束解析过程。
2: 判断普通命中,如果有多个命中,“记录”下来“最长”的命中结果。
(注意:记录但不结束,最长的为准)
3:继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功 1 个,则立即返回结果,并结束解析过程。
延伸分析
:
a:普通命中 顺序无所谓,是因为按命中的长短来确定的。
b: 正则命中,顺序有所谓,因为是从前往后命中的。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于