Nginx location 配置:从入门到精通

Nginx的 location 配置是Nginx服务器配置中非常关键的一部分,它决定了如何响应不同的HTTP请求。以下是关于Nginx location配置的详细解释:

一、基本语法

location指令的基本语法如下:


location [modifier] pattern {# 配置内容
}

其中,[=||*|^~|@]是修饰符,用于定义URI的匹配方式,/uri/是要匹配的URI。

二、修饰符详解

  1. 修饰符和模式
  • =:精确匹配。如果请求 URI 与模式完全匹配,则采用此配置块。
  • ^~:前缀匹配。如果请求 URI 以模式开头,并且是最长的匹配,则采用此配置块。
  • ~:正则表达式匹配(区分大小写)。
  • ~*:正则表达式匹配(不区分大小写)。
  • /:匹配任何请求。如果没有其他匹配,这个会作为默认匹配。
  1. 示例:

location = /exact-match {# 精确匹配 /exact-match
}location ^~ /static/ {# 前缀匹配 /static/
}location ~ \.php$ {# 区分大小写的正则表达式匹配,以 .php 结尾的请求
}location ~* \.(jpg|jpeg|png|gif|ico)$ {# 不区分大小写的正则表达式匹配,匹配图片文件
}location / {# 匹配任何请求
}

三、匹配顺序

当Nginx收到一个HTTP请求时,它会按照以下顺序进行location的匹配:

  1. 首先检查是否有精确匹配(使用=修饰符)。
  2. 如果没有精确匹配,检查是否有前缀匹配(使用^~修饰符)。
  3. 如果没有前缀匹配,检查是否有正则匹配(使用~或~*修饰符),按照配置文件中的顺序从上到下依次匹配。
  4. 如果没有正则匹配,使用通用匹配(使用/)。

注意:一旦匹配成功,Nginx就会停止继续查找其他location块,并按照当前匹配到的location块中的配置指令来处理请求。

四、实际案例

1. 静态文件服务

配置 Nginx 为静态文件提供服务,如 HTML、CSS 和 JavaScript 文件。

server {listen 80;server_name example.com;location / {root /var/www/html;index index.html index.htm;}location /images/ {root /var/www/html;}location ~* \.(css|js|jpg|jpeg|png|gif|ico)$ {root /var/www/html;expires 30d;}
}

在这个示例中:

  • 根 location 块将所有请求定向到 /var/www/html,并使用 index.html 或 index.htm 作为默认文件。
  • /images/ 块将 /images/ URI 的请求定向到相同的根目录。
  • 正则表达式 location 块为 CSS、JS 和图片文件设置了 30 天的缓存过期时间。

2. 反向代理

配置 Nginx 作为反向代理,将请求转发到后端服务器。

server {listen 80;server_name example.com;location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

在这个示例中:

  • 所有请求都会被转发到 http://backend_server。
  • 使用 proxy_set_header 设置了在请求头中传递的变量,以保持客户端信息。

3. 基于 IP 地址的访问控制

限制特定 IP 地址访问某些资源。

server {listen 80;server_name example.com;location / {root /var/www/html;index index.html index.htm;}location /admin {allow 192.168.1.1;deny all;}
}

在这个示例中:

  • 根 location 块提供常规服务。
  • /admin 块仅允许 IP 地址 192.168.1.1 访问,其他所有请求将被拒绝。

4. URL 重写

使用 rewrite 指令进行 URL 重写。

server {listen 80;server_name example.com;location / {root /var/www/html;index index.html index.htm;}location /old {rewrite ^/old/(.*)$ /new/$1 permanent;}
}

在这个示例中:

  • 所有以 /old 开头的请求将被重写为 /new,并返回一个永久重定向状态码。

五、注意事项

  • 在使用正则匹配时,要特别注意正则表达式的书写,避免因为正则表达式书写错误而导致匹配失败。
  • 在配置多个location块时,要注意匹配顺序和优先级,确保Nginx能够正确地处理不同的HTTP请求。
  • 如果在配置文件中使用了root指令来指定文件路径,要注意root指令与alias指令的区别,确保文件路径的正确性。

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

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

相关文章

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一,读写速度相对内存10以上,所以针对优化磁盘的技术非常的多,比如:零拷贝、直接I/O、异步I/O等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的…

如何实现观察者模式和发布-订阅模式?

要实现观察者模式和发布-订阅模式,你需要遵循一些基本的步骤和原则。下面分别介绍这两种模式的实现方法。 如何实现观察者模式: 观察者模式(Observer Pattern)是一种行为设计模式,用于维护观察者(Observe…

GAT1399协议分析(8)--ImageInfo字段详解

一、官方定义 接上一章节字段消息返回内容 "ImageInfo": { "ImageID": "34078100001190001002012024060513561300065", "InfoKind": 0, "ImageSource": "…

eclipse怎么导入python项目

python项目导入eclipse的步骤: 1、首先,打开Eclipse集成开发程序,在菜单栏上点击“File(F)”,在弹出来的列表中点击“导入(I)...”。 2、在弹出来的“导入”窗口中,选择“常规”选项中的“现有…

【uni-app】开发问题汇总

文章目录 1、APP获取dom2、添加页面,参考其他页面,国际化就是对应页面的导航的国际化"navigationBarTitleText": "%m.i.ForgetPaymentPassword.bartitle%",3、setStatusBarStyle这个导航栏设置方法不要了,导航栏现在都用…

SpringCloud Gateway中Filters详细说明

前面 https://blog.csdn.net/J080624/article/details/139494909 我们研究了GateWay中各种路由断言的使用。SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。 官网地址:SpringCloud Gateway Filter 【1】GatewayFilter Factories 路由过滤器允…

java使用websocket遇到的问题

java使用websocket的bug 1 websocket连接正常但是收不到服务端发出的消息java的websocket并发的时候导致连接断开(看着连接是正常的,但是实际上已经断开) 1 websocket连接正常但是收不到服务端发出的消息 java的websocket并发的时候导致连接断…

oracle中varchar和varchar2的区别

在Oracle数据库中,VARCHAR和VARCHAR2都是用于存储可变长度字符数据的数据类型,但它们之间有一些关键的区别。以下是这两者的主要区别: 数据类型来源: VARCHAR:这是标准SQL提供的类型,具有广泛的数据库系统…

一问看懂 llana2

"Illana2" 可能是指 "Llama 2",这是 Meta(Facebook 的母公司)推出的一个开源大型语言模型。Llama 2 是 LLaMA(Large Language Model Meta AI)的第二代版本,旨在用于各种自然语言处理任…

LeetCode|230. Kth Smallest Element in a BST

. 题目 Given the root of a binary search tree, and an integer k, return the kth smallest value (1-indexed) of all the values of the nodes in the tree. Example 1: Input: root [3,1,4,null,2], k 1Output: 1 Example 2: Input: root [5,3,6,2,4,null,null,…

DVWA-CSRF

CSRF Low 观察后端代码,只要password_new等于password_conf就可以修改密码。由于这两个参数是通过GET传递的,所以直接构造payload。 http://192.168.20.156/DVWA/vulnerabilities/csrf/?password_newpass&password_confpass&ChangeChange# 这…

cad导入su线条不在一个平面怎么办?

解决CAD导入sketchup线条不是共面问题,需要考虑到各个步骤如下: 1)检查CAD文件。首先要检查CAD文件,确保线条是连接在一起的,并且看看有没有多余的线,以及是否有子线段没有合并,如果有会导致导入…

云南区块链商户平台发票助手成品

目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…

情歌

题目描述 每次小明准备唱歌&#xff0c;他会选取两个数l和r&#xff08;l<r&#xff09;&#xff0c;他会将s中第l个字母~第r个字母拿出来。对于这个子串中的每个字母&#xff0c;他会重复吟唱k次&#xff0c;k为这个字母在字母表中的顺序。 例如&#xff0c;s’abbcb’&…

《Foundation CSS 参考手册》

《Foundation CSS 参考手册》 引言 Foundation 是一个强大的前端框架,它为开发者提供了一系列的CSS工具和组件,以便快速构建响应式、移动优先的网站。本参考手册旨在为那些希望深入了解和使用Foundation CSS的开发者提供一个全面的指南。 基础知识 1. 安装 Foundation 可…

unity中animation和animator在使用上的区别

Animation&#xff08;动画&#xff09;&#xff0c;可直接存储在物体上的animation组件中 Animation 组件用于在对象上直接存储和播放动画数据。这些数据通常是通过关键帧动画&#xff08;keyframe animation&#xff09;制作的&#xff0c;其中包含了对象在不同时间点的变换…

搜索与图论:八皇后问题

搜索与图论&#xff1a;八皇后问题 题目描述参考代码 题目描述 输入样例 4输出样例 .Q.. ...Q Q... ..Q...Q. Q... ...Q .Q..参考代码 #include <iostream>using namespace std;const int N 20;int n; char g[N][N]; bool col[N], dg[N], udg[N];void dfs(int u) {//…

WPF国际化的最佳实践

WPF国际化的最佳实践 1.创建项目资源文件 如果你的项目没有Properties文件夹和Resources.resx文件&#xff0c;可以通过右键项目-资源-常规-添加创建或打开程序集资源 2.添加国际化字符串 打开Resources.resx文件&#xff0c;添加需要翻译的文本字符&#xff0c;并将访问修…

充电桩产业链及商业模式

产业链概况 充电桩产业链分为上游元器件和设备生产商、建设商&#xff0c;中游为运营商&#xff0c;下游为各类充电场景。其中&#xff0c;上游零部件厂商提供充电模块&#xff08;IGBT、逆变器等&#xff09;、配电滤波设备、监控计费设备、充电枪等&#xff1b;中游充电桩厂…

.NET AI如何从0开始?

你是否在思考如何利用AI为您公司的产品增加智能方向的业务扩展&#xff1f; 或者你是否有思考过怎么去利用AI减少部分工作量&#xff1f; 如果你有类似于上面的问题&#xff0c;想要学习AI&#xff0c;并且您是一名.NET开发工程师&#xff0c;或您是一名弃暗投明的Java转.NET…