location 匹配规则
语法规则
location [=|~|~*|^~] /uri/ { … }
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
- 首先匹配
=
- 其次匹配
^~
- 其次是按文件中顺序的正则匹配
- 最后是交给
/
通用匹配 - 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
例子,有如下匹配规则:
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
那么产生的效果如下:
- 访问根目录/, 比如
http://localhost/
将匹配规则A - 访问
http://localhost/login
将匹配规则B,http://localhost/register
则匹配规则H - 访问
http://localhost/static/a.html
将匹配规则C - 访问
http://localhost/a.gif
,http://localhost/b.jpg
将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而http://localhost/static/c.png
则优先匹配到规则C - 访问
http://localhost/a.PNG
则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。 - 访问
http://localhost/a.xhtml
不会匹配规则F和规则G,http://localhost/a.XHTML
不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111
则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为反向代理服务器存在。
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
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?k=v
$host:localhost
$server_port:88
$request_uri:/test1/test2/test.php?k=v
$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$" {
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;
}
一些可用的全局变量,可以参考获取Nginx内置绑定变量章节。
相关推荐
**Nginx中的Location匹配规则详解** 在Nginx服务器配置中,`location`指令是核心部分之一,用于处理HTTP请求。它根据指定的规则来匹配URL,从而决定如何处理客户端的请求。本文将深入探讨Nginx `location`的匹配...
Nginx配置指令location匹配符优先级和安全问题详解Nginx location 匹配规则Nginx服务器的location指令匹配规则详解利用nginx如何匹配多个条件Nginx location匹配规则的方法示例简介Nginx中的location匹配规则nginx ...
nginx配置location总结及rewrite规则写法
### Nginx 配置 Location 时常见...总之,在配置 Nginx 时,正确理解和使用 `location` 的匹配规则和 `root`、`alias` 的区别是非常重要的。只有深入掌握这些概念,才能更高效地利用 Nginx 进行 Web 服务器的配置管理。
除了 `location` 配置外,Nginx 还支持强大的重写规则功能,可以通过 `rewrite` 指令实现 URL 的重定向或修改。以下是几个常用的 `rewrite` 标记: - **last**:继续执行后续的重写规则。 - **break**:终止重写...
Nginx 的 `location` 指令是配置 Web 服务器路由请求的关键部分,用于根据请求的 URI 来决定如何处理请求。以下是对 `location` 指令的详细解释和最佳实践: 1. **匹配规则**: - `=`:精确匹配,如果请求的 URI ...
语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 location ~ ...
nginx 语法规则详解 Nginx 语法规则是 Nginx 配置文件的核心组成部分,它规定了 Nginx 如何处理用户的请求。理解 Nginx 语法规则对于配置 Nginx 是非常重要的。本文详细介绍了 Nginx 语法规则的各种模式和匹配规则...
Nginx 反向代理 Location 语法规则详解 Nginx 的 Location 语法规则是 Nginx 反向代理中最重要的配置部分之一。Location 规则用于匹配客户端请求的 URI,并将其路由到相应的服务器或应用程序。下面我们详细解释 ...
`location` 的正则写法和 `rewrite` 规则是 Nginx 配置中的高级特性,用于实现灵活的URL管理和重定向。 1. **location 正则写法** - `location = /{}`:精准匹配,只有当请求的URI完全等于 `/` 时才匹配,不接受...
重写规则可以实现从一个location跳转到另一个location,最多允许10次重定向,超过这个次数,Nginx会返回500错误。此外,`set`指令允许创建新的变量并设置它们的值,这对于记录条件标识、传递参数和记录操作行为非常...
Nginx可以配置为反向代理服务器,即根据配置的location规则对请求进行匹配,并将匹配到的请求转发到后端的服务器。这个转发过程涉及到反向代理的配置,通常使用proxy_pass指令实现。 综上所述,Nginx的location匹配...
**Nginx Location 配置正则表达式详解** 在Nginx服务器配置中,`location`指令扮演着至关重要的角色。它允许我们根据请求的URI(Uniform Resource Identifier)进行精细化处理,例如转发请求到不同的后端服务、提供...
Nginx 服务器和 Location 匹配规则 Nginx 配置文件主要由 events、http、server、location、upstream 等块配置项和一些行配置项组成。Server 块匹配规则是 Nginx 配置文件中的一部分,对虚拟主机的相关参数进行配置...
NGINX location 配置中的优先级详解 NGINX 中的 location directive 是一个非常重要的配置指令,它可以根据不同的 URL 模式来匹配不同的请求路径。但是,location 的配置顺序并不是固定的,而是根据 Location ...
在Nginx配置中,`location`指令是用于定义URL路由和处理规则的关键部分,它决定了请求应如何被代理、重定向或静态文件服务。在本文中,我们将深入探讨`location`指令的匹配机制以及在多个`if`语句中使用`proxy_pass`...
3. 对于使用了正则表达式的location块,Nginx会按顺序检查,找到第一个匹配的规则即停止匹配过程。 4. 如果正则表达式匹配到了结果,则使用正则表达式的结果;如果没有找到匹配的正则表达式,那么会退回到前面找到的...
Nginx的转发规则主要通过配置其HTTP模块中的location指令实现。location指令用于匹配请求的URI,根据匹配结果决定如何处理请求。其基本语法如下: ```nginx location [=|~|~*|^~] URI { ... } ``` 1. `=`:精确...