Nginx 简述 _ 路径描述 _location 配置查找顺序

本贴最后更新于 2087 天前,其中的信息可能已经时移世异

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,获得更好的性能。
image.png

为什么需要 CPU 亲和

Nginx 正是利用了 cpu 的亲和来提升并发处理能力和减少不必要的额外性能损耗。当今服务器一般都是多 cpu 多核心的,nginx 作为接入层的中间件,他对于 cpu 的亲和就尤为重要,nginx 是由多个不同的 worker 的进程进行处理,假设有一台双 cpu 的服务器,每个 cpu4 个核心,把 8 个 worker 进程分别绑定到不同 cpu 核心上,这样均匀的分配,就能降低因 cpu 自动切换时的性能损失,

###sendfile 零拷贝

nginx 在处理静态文件方面非常有优势,因为其采用 senfile 运作方式
对比原来的 HttpServer 方式,当我们请求一个静态文件时,它会经过内核空间和用户空间,最终到达 socket,通过 socket 响应给用户。对于一台服务器操作系统会发生多次切换(内核空间到用户空间之间)。
image.png

因为静态文件不需要过多的用户空间的逻辑处理,可以直接传输。 Linux2.1 引入 sendfile 技术,sendfile 正是运用这种零拷贝传输模式,即文件的传输只通过内核空间传递给 socket 响应给用户。所以在 cdn 服务或动静分离的静态文件处理方面 nginx 会比其他服务性能高很多。
image.png

##安装目录简介
对于 yum 这种基于 RPM 包管理的软件包管理器安装的软件,可以使用 rpm -ql nginx 来查看指定软件(如 nginx)的所有文件目录,如下:
image.png

主要目录介绍:

路径 类型 作用
/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 查找顺序

image.png

总结:
location 的命中过程是这样的
1:先判断精准命中,如果命中,则立即返回结果并结束解析过程。
2: 判断普通命中,如果有多个命中,“记录”下来“最长”的命中结果。
(注意:记录但不结束,最长的为准)
3:继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功 1 个,则立即返回结果,并结束解析过程。
延伸分析
a:普通命中 顺序无所谓,是因为按命中的长短来确定的。
b: 正则命中,顺序有所谓,因为是从前往后命中的。

  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    313 引用 • 547 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...