Nginx: 配置项之root和alias的区别, 深入理解location, 以及stub_status模块的用法

news/2024/10/19 2:26:13/

root和alias的区别

  • root 和 alias 两者都是来指定我们的URI和我们磁盘文件上的一个具体静态资源文件的一个映射关系

语法结构

1 ) root

  • 语法:root path;
  • 上下文:http server location if

2 ) alias

  • 语法:alias path;
  • 上下文:location

共同点和区别

  • 相同点:URI到磁盘文件的映射
  • 区别:root会将定义路径与URI叠加;alias 则只取定义路径

区别示例

1 )root

location /picture {root /opt/nginx/html/picture;
}
  • 客户端请求 www.test.com/picture/1.jpg, 则对应磁盘映射
  • 路径 /opt/nginx/html/picture/picture/1.jpg

2 )alias

location /picture {alias /opt/nginx/html/picture;
}
  • 客户端请求 www.test.com/picture/1.jpg, 则对应磁盘映射
  • 路径 /opt/nginx/html/picture/1.jpg

5 ) 注意事项

  • 使用 alias 时,末尾一定加 /
  • alias 只能位于 location 块中

location

1 ) 基础用法

  • 语法:location [ = | ~ | ~* | ^~ ] uri { ... }
  • 上下文: server location
匹配规则含义示例
=精确匹配location = /images/ { … }
~正则匹配,区分大小写location ~ \.(jpg|gif)$ { … }
~*正则匹配,不区分大小写location ~* \.(jpg|gif)$ { … }
∧~匹配到即停止搜索location ^~ /images/ { … }
不带任何符号location / { … }
  • 上述,~* 用处不大,linux 默认区分大小写,与 nginx版本也有关
  • 上述,∧~ 中,如果 遇到 /images/xx?id=1 这种也会匹配

示例

http {server {listen 80;server_name  www.nginx-test.com;location = /match_all/ {root html;index index.html;}location ~ \.(jpegljpg) $ {root html/images;}location ^~ /bbs/ {root html;index index.html index.htm;}}
}
  • $ mkdir { match_all, bbs }

  • $ touch match_all/index.html

    match_all page
    
  • $ touch match_all/match.html

    match page
    
  • $ touch bbs/index.html

    bbs page
    
  • 配置 hosts

    192.168.1.23      www.nginx-test.com
    
  • 访问:http://www.nginx-test.com/match_all 显示 match_all page

  • 访问:http://www.nginx-test.com/match_all/match.html 显示 match page

  • 访问:http://www.nginx-test.com/1.jpg 显示 1.jpg

  • 访问:http://www.nginx-test.com/bbs 显示 bbs page

2 )指令中匹配规则的优先级

  • 优先级排序如下

    • = > ^~ > ~ > ~* > 不带任何字符
  • 官方示例

    location = / {[ configuration A ]
    }location / {[ configuration B ]
    }location /documents/ {[ configuration C ]
    }location ^~ /images/ {[ configuration D ]
    }location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
    }
    
    • 请求 / 则会匹配 A,B 但 A 优先级高,最终选择A
    • 请求 /index.html 会优先匹配 B, 因为A是精确匹配 (A, B均可能匹配)
    • 请求 /documents/document.html 会优先匹配C, 因为B比较模糊 (B, C均可能匹配)
    • 请求 /images/1.gif 会优先匹配 D, 因为优先级 ^~ > ~* (D,E均可能匹配)
    • 请求 /documents/1.jpg 只匹配 E
  • 特别注意,以下不能重复出现,否则报错

    location /test/ {[ configuration A ]
    }location ^~ /test/ {[ configuration B ]
    }
    

3 ) 理解 location 中的 URL 结尾的反斜线

url 写法的区别

3.1 不带 /

location /test {...
}
  • 首先,还是将 /test 作为一个目录来进行处理,寻找相关test目录并且下面是否有index.html
  • 如果找不到,则会尝试查找 test 文件,存在,则直接返回给浏览器

3.2 带 /

location /test/ {...
}
  • 这种会直接将 test 作为目录,并寻找 index.html
  • 如果找不到,仍不会将 test 作为一个文件,而是直接返回 404

stub_status 模块

  • 它是一个能够给 nginx 提供监控页面的模块,可以实现在页面中实时查看 nginx 服务运行的状态
  • 比如说当前正在处理用户的一个请求,连接数量,已经处理的所有客户端的请求数量
  • 包括正在接受的还有正在处理的,处于响应状态等等各种状态的监控的一个web页面

1 )语法结构

  • 指令: stub_status; 如果低于 1.7.5 版本: stub_status on;
  • 上下文: server location

2 ) 配置示例

# 备注,这个 uri 尽可能 长一些, 复杂一些,防止用户无意间访问到,引发安全问题
location /uri {stub_status;
}

3 )效果示例

Active connections: 2
server accepts handled requests883 883 928Reading: 0 Writing: 1 Waiting: 1
  • 上面 883 883 928 分别表示

    • 已接受的用户连接数
    • 正在处理的用户连接数
    • 处理完的所有的客户端请求数
  • 状态项,如下:

    状态项含义
    Active Connections活跃的连接数量
    accepts接受的客户端连接总数量
    handled处理的客户端连接总数量
    requests客户端总的请求数量
    Reading读取客户端的连接数
    Writing响应数据到客户端的连接数
    Waiting空闲客户端请求连接数量
  • 内嵌变量

    变量名含义
    $connections_active同Active connections值
    $connections_reading同Reading值
    $connections_writing同Writing值
    $connections_waiting同Waiting值

4 )配置示例

  • 配置前明确自己 nginx 的版本是否低于 1.7.5, 这个模块默认不会编译到 nginx 中的
  • nginx想要去支持, 编译的时候,必须要加上 --with-http_stub_status_module
  • 可以使用 $ opt/nginx/sbin/nginx -V 检验是否含有上述参数
    • 可以显示当前版本的nginx编译了哪些模块
  • nginx 本身是一个模块化的设计,在 configure 编译的时候,有很多这样的指令
  • 可以通过 $ ./configure --help (注意,在有这个二进制的目录下执行) 查看类似指令

现在开始配置

server {location /monitor_status {stub_status;}
}
  • $ nginx -t
  • $ nginx -s reload
  • 访问 http://www.nginx-test.com/monitor_status
  • 就会出现内容,展示如下
    Active connections: 1
    server accepts handled requests44 44 51Reading: 0 Writing: 1 Waiting: 0
    
  • 当刷新页面,数据就会变化,响应速度很快

http://www.ppmy.cn/news/1514225.html

相关文章

c++ opencv显示图片

项目中添加头文件&#xff0c;库不在赘述&#xff0c;这里直接上核心代码&#xff1a; #include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <iostream> using na…

Redis 为什么要设计成单线程?Redis 6.0 版本开始为什么变成多线程?

Redis 最初采用了单线程模型&#xff0c;这一设计决策主要是为了简化并发控制并提升性能。尽管 Redis 的单线程模型在许多场景中表现出色&#xff0c;但从 Redis 6.0 版本开始&#xff0c;引入了多线程支持以优化网络 I/O 操作。下面是单线程模型的优点和 Redis 多线程演变的详…

基于django的影音播放网站 /基于python的影视网站/影视播放系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

夏季炎热,宠物化身掉毛大王,猫咪浮毛异味问题该如何解决?

最近猫咪掉毛是在太严重了&#xff0c;我以为是太久没给它洗澡了&#xff0c;下班连忙带去宠物店洗澡。结果宠物店的姐姐告诉我&#xff0c;是因为换毛季&#xff0c;这是一种正常的生理现象&#xff0c;平时多加清理就好了。我还奇怪梳毛的时候都听话不少&#xff0c;原来是太…

KT来袭,打造沉浸式体验的聚合性web3应用平台

随着步入 2024&#xff0c;漫长的区块链熊市即将接近尾声。纵观产业发展&#xff0c;逆流而上往往会是彰显品牌市场影响力和技术实力的最佳证明。在这次周期中&#xff0c;一个名为KT的web3.0聚合平台吸引了市场关注&#xff0c;无论在市场层面还是技术层面&#xff0c;都广泛赢…

前端跨域2

前端跨域2 前端跨域解决方案&#xff08;11种方案&#xff09; 1.JSONP跨域解决方案的底层原理 script、img、link、iframe...<script src"https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>// 这个就是因为script标签没有跨域限制&#xff0…

EmguCV学习笔记 VB.Net 2.4 Image类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

基于tcp c/s的网络通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) tcp协议特点: 1. 面向连接 //类似打电话通话之前 &#xff0c;必须先打通 2. 可靠传输 …