Nginx Location配置语法介绍、优先级说明、nginx的root和alias指令的区别

本文详细介绍了Nginx中location指令的使用方法及其匹配规则,包括不同操作符的优先级和匹配顺序,并对比了root与alias指令的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



nginx

语法规则:location   [=|~|~*|^~|!~|!~*]    /uri/   { … }   

location匹配的是$document_uri,$document_uri 会随着重定向而改变,request_uri则由浏览器访问的url决定,不会随着nginx服务器重定向改变而改变。

location为关键字  中括号中的为操作符号,体现匹配的优先级  /***/要匹配的uri(可以使正则表达式)  { … }一些说明 如$表示结尾

操作符 = 为 精确匹配 拥有优先级,优先级最高

操作符 ^~ 为某个常规字符串开头 因为匹配的也较为准确 拥有绝对优先级,仅次=

操作符 ~   表示区分大小写的正则匹配(uri区分大小写)没有绝对优先级

操作符 ~* 表示不区分大小写的正则匹配  没有绝对优先级

!为逻辑非操作

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 没有绝对优先级

/ 通用匹配   表示任何请求都会匹配到    拥有绝对优先级,拥有的优先级最低

 

多个location配置的情况下匹配顺序为

首先匹配=,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。

当有匹配成功时候,停止匹配,按当前匹配规则处理请求。也就是nginx的location有且只能被匹配一个。


nginx的root和alias指令的区别

nginx配置下有两个指定目录的执行,root和alias

location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件 
 location /img/ {
    root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]

alias是一个目录别名的定义,root则是最上层目录的定义。

还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~


### 正确配置 Nginx 的 `location` 指令 Nginx 中的 `location` 指令用于定义如何处理客户端请求,其匹配规则决定了特定 URL 请求会被哪个配置块所处理。以下是关于 `location` 指令的关键知识点以及正确配置的方法。 #### 1. 基本语法 `location` 指令的基本语法如下: ```nginx location [modifier] pattern { # 配置内容 } ``` 其中 `[modifier]` 是可选修饰符,用于改变匹配行为;`pattern` 表示要匹配的路径模式[^2]。 #### 2. 匹配规则 Nginx 使用了一套复杂的匹配规则来决定哪些请求会进入某个 `location` 块: - **精确匹配 (`=`)** 当使用 `=` 作为修饰符时,表示精确匹配。这种匹配具有最高的优先级,只有当请求 URI 完全等于指定路径时才生效。例如,在以下配置中,仅当访问 `/abc` 路径时返回 `"access success"`。 ```nginx location = /abc { default_type text/plain; return 200 "access success"; } ``` 这种方式适用于需要严格控制某些具体路径的情况][^[^43]。 - **前缀匹配 (无修饰符)** 如果未指定任何修饰符,则默认执行最长前缀匹配。即如果多个 `location` 块都可能匹配到当前请求,那么会选择最具体的那个(即拥有更长公共前缀的那个)。例如: ```nginx location /images/ { root /var/www/html; } location /images/thumbnails/ { root /var/www/html; } ``` 访问 `/images/thumbnails/example.jpg` 将被第二个 `location` 处理,因为它提供了更长的前缀[^1]。 - **正则表达式匹配 (`~`, `~*`)** - `~`: 执行区分大小写的正则表达式匹配。 - `~*`: 执行不区分大小写的正则表达式匹配。 正则表达式的优先级低于精确匹配普通前缀匹配,但在所有普通前缀匹配完成后才会考虑它们。例如: ```nginx location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } ``` - **通配符匹配 (`^~`)** 若使用 `^~` 修饰符,则即使后续存在更高优先级的正则表达式也不会触发。它主要用于快速终止进一步的匹配过程。例如: ```nginx location ^~ /static/ { root /var/www/static; } ``` #### 3. 实际案例分析 假设有一个简单的 Web 应用程序部署在本地环境上,并希望实现静态文件加速功能。可以按照以下方式进行配置: ```nginx server { listen 80; server_name localhost; # 精确匹配根目录下的index.html页面 location = / { root html; index index.html; } # 动态PHP脚本解析 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } # 提供静态资源服务 location /static/ { alias /usr/share/nginx/static/; } } ``` 上述例子展示了多种类型的 `location` 配置及其应用场景^。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值