资讯专栏INFORMATION COLUMN

Nginx 学习总结(3)—— Location 模块

biaoxiaoduan / 3620人阅读

摘要:改为后,显示出文件的大概大小,单位是或者或者默认为,显示的文件时间为时间。

这是 Nginx 学习总结的第三篇,上一篇介绍到了 Nginx 学习总结(2) —— 基本配置,这一篇会对Location 模块 做一些总结。我们知道,Location 模块 主要是用于针对某些特定的 URL 进行配置,可以由前缀字符串定义,也可以由正则表达式定义。

Location 匹配规则
location = /test.png {
    # 精确匹配
    [ configuration A ] 
}

location / {
    # 通用匹配,但是正则表达式和最长字符串会优先被匹配
    [ configuration B ] 
}

location /documents/ {
    # 前缀字符串匹配
    # 匹配任何以 /documents/ 开头的请求
    # 只有后面的正则表达式没有匹配到时,该配置才会被采用
    [ configuration C ] 
}

location ^~ /images/ {
    # 前缀字符串匹配
    # 匹配任何以 /images/ 开头的请求,匹配成功以后,会停止搜索后面的正则表达式匹配
    [ configuration D ] 
}

location ~* .(gif|jpg|jpeg)$ {
    # 正则表达式匹配,匹配所有以 gif,jpg,jpeg 结尾的请求
    # 然而,所有请求 /images/ 下的图片会被 configuration D 处理,因为 ^~ 指令,匹配不到这一条规则
    [ configuration E ] 
}

location /images/abc/ {
    # 前缀字符串匹配
    # 只有去掉 configuration D 才能被匹配到
    [ configuration F ] 
}

= 精确匹配;

^~ 提高前缀字符串的匹配优先级;

~ 区分大小写的正则表达式匹配;

~* 不区分大小写的正则表达式匹配;

/ 通用匹配(因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求),如果没有其它匹配,任何请求都会匹配到。

默认情况, Nginx 先进行前缀字符串匹配,然后进行正则表达式匹配:如果前缀字符串匹配到了,并且前缀字符串有^~ ,就不继续往下匹配正则表达式;如果没有这个^~ ,即使前缀匹配到了,也要进行正则表则式匹配,如果正则表达式匹配到了,就是用正则表达式的,没有就是用前缀字符串匹配到的路径。总结如下:

匹配优先级:精确匹配 >(^~) > 正则匹配 > 字符串(长 > 短)
Location 配置应用
1. 常用使用规则
# 第一个必选规则
# 直接匹配网站根目录,通过域名访问网站首页比较频繁,使用这个会加速处理,比如官网首页
location = / {
    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;
}

# 第二个必选规则
# 处理静态文件请求,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
    expires 7d; # 用来设置 HTTP 应答中的 Expires 和 Cache-Control 的头标时间,来告诉浏览器访问这个静态文件时,不用再去请求服务器,直接从本地缓存读取就可以了
}
location ^~ /public/ {
    root /usr/share/nginx/html/laravel/public;
    expires 7d;
}

# 第三个必选规则
# 用来转发动态请求到后端应用服务器
location / {
    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;
}
2. 配置临时跳转

有时,需要将原来的 URL 请求跳转到新的 URL 链接,但又不想使原来的 URL 失效,比如访问 http://jochen.com/test 时,需要跳转到 http://jochen.com/ ,此时可以配置一个跳转:

location = /test/ {
    return 302 http://jochen.com/;
}
3. 配置访问控制

有时,我们需要对访问做一些限制。比如,Nginx 的 ngx_http_stub_status_module 模块(该模块不是默认安装的,可以使用 --with-http_stub_status_module 编译安装)提供了查看 Nginx 运行的基本状态信息,我们只想让部分 IP 的人可以查看,此时可以配置一个访问控制:

location /nginx-status {
    # 在1.7.5版本之前,使用 stub_status on; 指令
    stub_status; 
    
    allow 127.0.0.1;
    allow 192.168.4.220;
    deny all;
}
4. 列出目录

Nginx 默认是不允许列出整个目录的。如需此功能,我们可以通过一下配置开启:

location / {
    root   /usr/share/nginx/html;
    autoindex on;             # 开启目录自动索引
    autoindex_exact_size off; # 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
    autoindex_localtime on;   # 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
}

参考文章

nginx 服务器安装及配置文件详解

前端工程师学习 Nginx 入门篇

Module ngx_http_stub_status_module

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39851.html

相关文章

  • Nginx 学习总结(4)—— Rewrite 模块

    摘要:根据官方文档说明,模块是用于使用正则表达式更改请求,有条件地选择配置,并返回重定向。指令停止执行模块的指令集,但是其他模块指令不受影响。可以使用标志来终止指令的进一步处理。 这是 Nginx 学习总结的第四篇,上一篇介绍到了 Nginx 学习总结(3) —— Location 模块,这一篇会对Rewrite模块 做一些总结。根据官方文档说明,Rewrite 模块是用于使用 PCRE 正...

    zhjx922 评论0 收藏0
  • Nginx 学习总结(2) —— 基本配置

    摘要:配置信息主要分为六大部分全局设置事件设置服务器设置虚拟主机设置匹配设置反向代理设置。最大客户端连接数由和决定作为服务器时,作为反向代理时,。参考文章服务器安装及配置文件详解的配置虚拟主机负载均衡和反向代理 这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) —— 概述,这一篇会对 Nginx 的基本配置做一些总结。 Nginx 配置信息主要分为六大部分: m...

    leoperfect 评论0 收藏0
  • Nginx 学习总结(6) —— 负载均衡

    摘要:实现负载均衡负载均衡是反向代理技术的一种运用。而实现负载均衡的核心在于如何将请求合理地分配给不同的后端服务器。 这是 Nginx 学习总结的第六篇,上一篇介绍到了 Nginx 学习总结(5) —— 反向代理,本文主要演示结合 proxy 和 upstream 模块的使用来实现 Nginx 的负载均衡。 Nginx 官网中对 upstream 模块的介绍:ngx_http_upstrea...

    wwq0327 评论0 收藏0
  • Nginx 学习总结(5) —— 反向代理

    摘要:代理请求当代理请求时,它会将请求发送到指定的代理服务器,获取响应并将其发送回客户端。是否启用缓冲使用指令,默认是开启的。 这是 Nginx 学习总结的第五篇,上一篇介绍到了 Nginx 学习总结(4)—— Rewrite 模块,这一篇会对 反向代理 相关知识做一些总结。 什么是代理?代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或通过除 HTTP 以外的协议将请求...

    Achilles 评论0 收藏0
  • Nginx源码分析】Nginx配置文件解析(一)

    摘要:本文将从源码从此深入分析配置文件的解析,配置存储,与配置查找。在学习配置文件的解析过程之前,需要先了解一下模块与指令的一些基本知识。 运营研发团队 李乐 配置文件是nginx的基础,对于学习nginx源码甚至开发nginx模块的同学来说更是必须深究。本文将从源码从此深入分析nginx配置文件的解析,配置存储,与配置查找。 看本文之前读者可以先思考两个问题: 1.nginx源码中随处可以...

    JasonZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<