在这篇文章中,我们将为您详细介绍nginx的location配置详解的内容,并且讨论关于nginx的location配置详解带/与不带/的区别的相关问题。此外,我们还会涉及一些关于nginxlocat
在这篇文章中,我们将为您详细介绍nginx 的 location 配置详解的内容,并且讨论关于nginx的location配置详解带/与不带/的区别的相关问题。此外,我们还会涉及一些关于nginx location 的配置、nginx location 配置、Nginx location 配置信息、Nginx location 配置心得的知识,以帮助您更全面地了解这个主题。
本文目录一览:- nginx 的 location 配置详解(nginx的location配置详解带/与不带/的区别)
- nginx location 的配置
- nginx location 配置
- Nginx location 配置信息
- Nginx location 配置心得
nginx 的 location 配置详解(nginx的location配置详解带/与不带/的区别)
语法规则: location [=|~|~*|^~] /uri/ { … }

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/
}
nginx location 的配置
一、基本语法:location [=|~|~*|^~] /uri/ { … }
二、分类:
1. 基本 location:以 “ = ” 或 “ ^~ ” 为前缀或者没有任何前缀的 /uri/
2. 正则 location:以 “ ~ ” 或 “ ~* ” 为前缀的 /uri/
基本 location 又分为 2 种:
1)严格精确匹配: “ = ”
2)最大前缀匹配: 无前缀 或者以 “ ^~ ”
三、解释:
1)= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
2)~ 为区分大小写匹配 (可用正则表达式)
3)~* 为不区分大小写匹配 (可用正则表达式)
4)!~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配
5)^~ 如果把这个前缀用于一个常规字符串,那么告诉 nginx 如果路径匹配那么不测试正则表达式。
四、规则:
1. 先匹配普通 location ,再匹配正则 location ,但是如果普通 location 的匹配结果恰好是 “严格精确( exact match )” 的,则 nginx 不再尝试后面的正则 location ;如果普通 location 的匹配结果是 “最大前缀”,则正则 location 的匹配覆盖普通 location 的匹配。
2. 基本 location 中,严格精确匹配大于最大前缀
2. 对于普通 location 指令,匹配规则是:最大前缀匹配(与顺序无关),如果恰好是严格精确匹配结果或者加有前缀 “ ^~ ” 或 “ = ”(符号 “ = ” 只能严格匹配,不能前缀匹配),则停止搜索正则 location ;但对于正则 location 的匹配规则是:按编辑顺序逐个匹配(与顺序有关),只要匹配上,就立即停止后面的搜索。
nginx location 配置
location 匹配顺序
- "=" 前缀指令匹配,如果匹配成功,则停止其他匹配
- 普通字符串指令匹配,顺序是从长到短,匹配成功的 location 如果使用 ^~,则停止其他匹配(正则匹配)
- 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
- 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果
注意点
-
匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的 location 顺序是无关紧要的,反正最后 nginx 会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
-
一般情况下,匹配成功了普通字符串 location 后还会进行正则表达式 location 匹配。有两种方法改变这种行为,其一就是使用 “=” 前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用 “^~” 前缀,如果把这个前缀用于一个常规字符串那么告诉 nginx 如果路径匹配那么不测试正则表达式。
匹配模式及顺序
location = /uri = 开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对 URL 路径进行前缀匹配,并且在正则之前。
location ~ pattern ~ 开头表示区分大小写的正则匹配。
location ~* pattern ~* 开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / 通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default。
实验案例
测试 "^~" 和 "~",nginx 配置如下。浏览器输入 http://localhost/helloworld/test,返回 601。如将 #1 注释,#2 打开,浏览器输入 http://localhost/helloworld/test,返回 603。注:#1 和 #2 不能同时打开,如同时打开,启动 nginx 会报 nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串。
location ^~ /helloworld { #1
return 601;
}
#location /helloworld { #2
# return 602;
#}
location ~ /helloworld {
return 603;
}
测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)。浏览器输入 http://localhost/helloworld/test/a.html,返回 601。浏览器输入 http://localhost/helloworld/a.html,返回 602。
location /helloworld/test/ { #1
return 601;
}
location /helloworld/ { #2
return 602;
}
测试正则表达式的顺序(正则匹配与顺序相关)。浏览器输入 http://localhost/helloworld/test/a.html,返回 602;将 #2 和 #3 调换顺序,浏览器输入 http://localhost/helloworld/test/a.html,返回 603
location /helloworld/test/ { #1
return 601;
}
location ~ /helloworld { #2
return 602;
}
location ~ /helloworld/test { #3
return 603;
}
Nginx location 配置信息
Nginx location 配置信息
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}
location ~* /js/.*/\.js
以 = 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
优先级: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > ( / )
上面的匹配结果 按照上面的location写法,以下的匹配示例成立:
-
/ -> config A
确完全匹配,即使/index.html也匹配不了
-
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
-
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
-
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序 -
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
-
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
-
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E
实际使用建议
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
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/
}
Nginx location 配置心得
关于
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /hsc { root /home/hsc/nginx; index index.html; } location / { root /home/hsc/nginx/hsc; index index.html index.htm; } }
解释下:127.0.0.1 会匹配到 location / 然后 root(表示根目录) 为/home/hsc/nginx/hsc 然后nginx 再去找/后面的内容这里为空,所以就找根目录下的内容。
27.0.0.1/hsc 会匹配到 llocation /hsc 然后 root(表示根目录) 为/home/hsc/nginx 然后nginx 再去找/后面的内容这里为hsc这个目录,所以就会切换到/home/hsc/nginx/hsc目录下。
以上就介绍了Nginx location 配置心得,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
关于nginx 的 location 配置详解和nginx的location配置详解带/与不带/的区别的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于nginx location 的配置、nginx location 配置、Nginx location 配置信息、Nginx location 配置心得的相关知识,请在本站寻找。
本文标签: