學習nginx location ~ .*.(js|css)?$語法規則

引言

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.gif,?http://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;現已被廣泛應用于銀行、醫療、財會、教育等多個領域。隨…