引言

nginx作为一款高性能的Web服务和反向代理服务,在网站性能优化中扮演着重要的角色。其中,location指令的正确配置是优化工作的关键之一。

这篇记录主要解析location ~ .*\.(js|css)?$这一特定的语法规则,帮助大家理解其在nginx配置中的作用。

语法规则:

location [=|~|~*|^~] /uri/ { … }

  • = :开头表示精确匹配
  • ^~ :开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  • ~ :开头表示区分大小写的正则匹配
  • ~* :开头表示不区分大小写的正则匹配
  • !~和!~* :分别为区分大小写不匹配及不区分大小写不匹配 的正则
  • / :通用匹配,任何请求都会匹配到

多个location配置的情况下匹配顺序为(参考资料,仅供参考):

  1. 首先匹配 =
  2. 其次匹配^~
  3. 其次是按文件中顺序的正则匹配
  4. 最后是交给 / 通用匹配
  5. 当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

匹配示例

location = / {精确匹配,必须是127.0.0.1/#规则A
}
location = /login {精确匹配,必须是127.0.0.1/login#规则B
}
location ^~ /static/ {非精确匹配,并且不区分大小写,比如127.0.0.1/static/js.#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {区分大小写,以gif,jpg,js结尾#规则D
}
location ~* \.png$ {不区分大小写,匹配.png结尾的#规则E
}
location !~ \.xhtml$ {区分大小写,匹配不已.xhtml结尾的#规则F
}
location !~* \.xhtml$ {#规则G
}
location / {什么都可以#规则H
}

那么产生的效果如下:

  1. 访问根目录/, 比如http://localhost/ 将匹配规则A
  2. 访问 http://localhost/login 将匹配规则Bhttp://localhost/register 则匹配规则H
  3. 访问 http://localhost/static/a.html 将匹配规则C
  4. 访问 http://localhost/a.gifhttp://localhost/b.jpg 将匹配规则D规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C
  5. 访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
  6. 访问 http://localhost/a.xhtml 不会匹配规则F规则Ghttp://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
  7. 访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php)tomcat(jsp)nginx作为方向代理服务器存在。

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:

这里直接转发给后端应用服务器,也可以是一个静态页

第一个必选规则

location = / {proxy_pass http://tomcat:8080/index
}

第二个必选规则是处理静态文件请求,这是nginx本身的强项

有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}

第三个规则就是通用规则,用来转发动态请求到后端应用服务器

非静态文件请求就默认是动态请求,自己根据实际把握。毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {proxy_pass http://tomcat:8080/
}

其他语法规则

一、ReWrite语法

  • last – 基本上都用这个Flag。
  • break – 中止Rewirte,不在继续匹配
  • redirect – 返回临时重定向的HTTP状态302
  • permanent – 返回永久重定向的HTTP状态301

1. 下面是可以用来判断的表达式:

  • -f和!-f用来判断是否存在文件
  • -d和!-d用来判断是否存在目录
  • -e和!-e用来判断是否存在文件或目录
  • -x和!-x用来判断文件是否可执行

2. 下面是可以用作判断的全局变量

举例http://localhost:88/test1/test2/test.php
$host:localhost 
$server_port:88 
$request_uri:http://localhost:88/test1/test2/test.php 
$document_uri:/test1/test2/test.php 
$document_root:D:\nginx/html 
$request_filename:D:\nginx/html/test1/test2/test.php

二、Redirect语法

server { listen 80; server_name start.igrow.cn; index index.html index.php; root html; if ($http_host !~ “^star\.igrow\.cn$&quot { rewrite ^(.*) http://star.igrow.cn$1 redirect; } 
} 

三、防盗链

location ~* \.(gif|jpg|swf)$ { valid_referers none blocked start.igrow.cn sta.igrow.cn; if ($invalid_referer) { rewrite ^/ http://$host/logo.png; } 
}

四、根据文件类型设置过期时间

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { expires 1h; break; } 
}

五、禁止访问某个目录

location ~* \.(txt|doc)${ root /data/www/wwwroot/linuxtone/test; deny all; 
}

六、一些可用的全局变量

$args 
$content_length 
$content_type 
$document_root 
$document_uri 
$host 
$http_user_agent 
$http_cookie 
$limit_rate 
$request_body_file 
$request_method 
$remote_addr 
$remote_port 
$remote_user 
$request_filename 
$request_uri 
$query_string 
$scheme 
$server_protocol 
$server_addr 
$server_name 
$server_port 
$uri

最后

如上演示并介绍了location ~ .*\.(js|css)?$这一nginx配置指令的语法规则及其应用。

掌握nginxlocation指令,尤其是基于正则表达式的匹配规则,是基础且必要的技能。正确地运用这些规则,可以显著提高nginx服务器性能和效率,进而带来更佳的网站访问体验。

原文链接:学习nginx location ~ .*.(js|css)?$语法规则 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95612.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95612.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95612.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nmap网络扫描工具详细使用教程

目录 Nmap 主要功能 网络存活主机发现 (ARP Ping Scan) 综合信息收集扫描 (Stealth SYN Service OS) 全端口扫描 (Full Port Scan) NSE 漏洞脚本扫描 SMB 信息枚举 HTTP 服务深度枚举 SSH 安全审计 隐蔽扫描与防火墙规避 Nmap 主要功能 Nmap 主要有以下几个核心功能…

Spring Boot 3.x 的 @EnableAsync应用实例

语法结构使用 EnableAsync 其实就像为你的应用穿上一件时尚的外套,简单又高效!只需在你的配置类上添加这个注解,轻松开启异步之旅。代码如下:想象一下,你的应用一瞬间变得灵活无比,像一个跳舞的机器人&…

Nginx Tomcat Jar包开机启动自动配置

一、Nginx配置1、创建systemd nginx 服务文件vi /usr/lib/systemd/system/nginx.service### 内容[Unit] DescriptionThe nginx HTTP and reverse proxy server Afternetwork.target[Service] Typeforking ExecStartPre/mnt/nginx/sbin/nginx -t ExecStart/mnt/nginx/sbin/nginx…

修订版!Uniapp从Vue3编译到安卓环境踩坑记录

Uniapp从Vue3编译到安卓环境踩坑记录 在使用Uniapp开发Vue3项目并编译到安卓环境时,我遇到了不少问题,现将主要踩坑点及解决方案整理如下,供大家参考。 1. 动态导入与静态导入问题 问题描述: 在Vue3项目中使用的动态导入语法在Uni…

零售消费企业的数字化增长实践,2025新版下载

当下零售消费行业,早不是有货就好卖的时代了。一方面,前两年消费市场的热度催生出大批新品牌入场,供给端瞬间拥挤;另一方面,消费者获取信息越来越容易,新潮流、新观念几天一个变化。企业想稳住增长、必须要…

[网鼎杯 2020 青龙组]AreUSerialz

BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台&#xff0c;为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#[%E7%BD%91%E9%BC%8E%E6%9D%AF%202020%20%E9%9D%92%E9%BE%99%E7%BB%84]AreUSerialz启动靶机&#xff0c;页面显示php代码 <?phpincl…

贵州移动创维E900V22F-S905L3SB-全分区备份

贵州移动创维E900V22F-S905L3SB-全分区备份刷机教程&#xff1a;请查看压缩包内教程&#xff01;下载地址&#xff1a;链接: https://pan.baidu.com/s/1EyYgLNZlxv-UvHpmTRxA_g?pwd5v8w 提取码: 5v8w链接&#xff1a;https://www.123pan.com/s/Jbe8Vv-dTMN 提取码:0123备用链接…

springboot redis 缓存入门与实战

Spring Boot3 Redis 项目地址https://gitee.com/supervol/loong-springboot-study&#xff08;记得给个start&#xff0c;感谢&#xff09;Redis 介绍Redis 是一款高性能的 内存数据库&#xff08;支持持久化&#xff09;&#xff0c;兼具缓存、NoSQL 存储、分布式锁等核心能力…

Redis缓存三大经典问题:雪崩、穿透、击穿详解

在高并发系统中&#xff0c;Redis作为高性能的内存缓存数据库&#xff0c;缓存可能会引发一系列严重问题——缓存雪崩、缓存穿透、缓存击穿。一、缓存雪崩&#xff08;Cache Avalanche&#xff09;1. 什么是缓存雪崩&#xff1f;缓存雪崩是指大量缓存数据在同一时间集中失效&am…

后端Web实战-删除修改

目录 1.删除员工 1.1.1 需求 1.1.2 接口文档 1.1.3 思路分析 1.1.4 功能开发 1.1.4.1 Controller接收参数 1.1.4.2 Service 1.1.4.3 Mapper 1.1.5 功能测试 1.1.6 前后端联调 2.修改员工 2.1 查询回显 2.1.1 接口文档 2.1.2 实现思路 2.1.3 代码实现 2.1.4 方式…

VNC连接服务器实现远程桌面-针对官方给的链接已经失效问题

按照官方给的链接在安装包的时候找不到链接&#xff0c;原链接可能已经失效新链接# 下载 libjpeg-turbo 官方 debwget --no-proxy "https://sourceforge.net/projects/libjpeg-turbo/files/2.0.90%20(2.1%20beta1)/libjpeg-turbo-official_2.0.90_amd64.deb/download"…

Docker在Windows与Linux系统安装的一体化教学设计

Docker跨平台安装实训课程设计 一、课程定位 本实训课程面向计算机应用技术、云计算技术与应用等专业学生&#xff0c;通过对比学习Docker在Windows和Linux两大主流操作系统上的安装与配置方法&#xff0c;帮助学生掌握容器化技术的基础环境搭建能力&#xff0c;为后续的容器管…

c++多线程(1)------创建和管理线程td::thread

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 std::thread 是 C11 标准库中用于创建和管理线程的核心类&#xff0c;定义在 头文件中。它使得多线程编程变得简单、类型安全且跨平台。 一、std::thread 简介 std::thread 是一个类…

Flutter环境搭建全攻略之-windows环境搭建

一&#xff0c;Flutter 官网&#xff1a;https://flutter.dev Flutter Packages官网&#xff1a;https://pub.dev 二&#xff0c;Windows 上面搭建Flutter Android运行环境 对应软件可以联系客服&#xff0c;或者网盘里面下载 1&#xff0c;Flutter Android环境搭建&#xff1a…

《Docker 零基础入门到实战:容器化部署如此简单,运维效率直接拉满》

相信你对封面图上的「Docker 鲸鱼」图标并不陌生 —— 它正是解决「开发环境能跑&#xff0c;生产环境崩了」的容器化神器&#xff01;Docker 通过打包应用与依赖到轻量容器&#xff0c;实现了「一次构建&#xff0c;到处运行」&#xff0c;彻底消除环境不一致的痛点。本文从 D…

Spring Security 深度学习(六): RESTful API 安全与 JWT

目录 1. 引言&#xff1a;无状态认证的崛起2. JWT (JSON Web Token) 核心概念2.1 什么是JWT&#xff1f;2.2 JWT的组成&#xff1a;Header, Payload, Signature2.3 JWT的工作原理2.4 JWT的优缺点与适用场景 3. Spring Security中的JWT集成策略3.1 禁用Session管理与CSRF防护3.2…

无名信号量

include <myhead.h> oid *task( void *file_size)int file_size1*(int*)file_size;//打开源文件int fdopen("./hello",O_RDONLY);if(fd-1){perror("open error\n");return NULL;}//打开目标文件int fd1open("./world",O_WRONLY);if(fd1-1)…

免费CRM系统与Excel客户管理的区别

很多中小企业在客户管理初期&#xff0c;会选择使用Excel表格进行客户数据的整理与维护。但随着业务规模扩大&#xff0c;客户信息日益复杂&#xff0c;Excel逐渐暴露出诸多局限性。此时&#xff0c;免费CRM系统应运而生&#xff0c;成为企业客户管理升级的重要选择。本文将深入…

linux Nginx服务配置介绍,和配置流程

1、Nginx 配置介绍认识Nginx服务的主配置文件 nginx.confnginx的配置文件一般在 /usr/local/nginx/conf/下&#xff0c;然后直接vim nginx.com 即可编辑1.1 全局配置介绍全局配置位于主配置文件最顶部&#xff0c;作用于整个Nginx服务进程&#xff0c;影响服务的资源分配、运行…

文字识别接口-文字识别技术-ocr api

文字识别接口&#xff0c;顾名思义&#xff0c;就是一种将图像文字或手写文字转换为可编辑文本的技术。文字识别接口&#xff0c;基于深度学习算法与自主ocr核心实现多种场景字符的高精度识别与结构化信息提取&#xff0c;现已被广泛应用于银行、医疗、财会、教育等多个领域。随…