Nginx的location配置详解

简介: 【10月更文挑战第16天】Nginx的location配置详解

💡Location 是 Nginx 中一个非常核心的配置,通过location块,Nginx可以根据URI的不同部分进行匹配,并指定不同的行为,如代理请求、提供静态文件、重定向等。这篇重点讲解一下 Location 的配置问题以及一些注意事项。

语法

关于 Location,举个简单的配置例子:

http {
    
  server {
   
      listen 80;
        server_name www.yayujs.com;
        location / {
   
          root /home/www/ts/;
          index index.html;
        }
  }
}

大致的意思是,当你访问 www.yayujs.com 的 80 端口的时候,返回 /home/www/ts/index.html 文件。

我们看下 Location 的具体语法:

location [ = | ~ | ~* | ^~ ] uri { ... }

重点看方括号中的 [ = | ~ | ~* | ^~ ],其中 | 分隔的内容表示你可能会用到的语法,其中:

  • = 表示精确匹配,比如:
location = /test {
   
  return 200 "hello";
}

# /test ok
# /test/ not ok
# /test2 not ok
# /test/2 not ok
  • ~ 表示区分大小写的正则匹配,比如:
location ~ ^/test$ {
   
  [ configuration ] 
}

# /test ok
# /Test not ok
# /test/ not ok
# /test2 not ok
  • ~* 表示不区分大小写的正则匹配
location ~* ^/test$ {
        
    [ configuration ] 
}

# /test ok
# /Test ok
# /test/ not ok
# /test2 not ok
  • ^~ 表示 uri 以某个字符串开头
location ^~ /images/ {
       
    [ configuration ] 
}

# /images/1.gif ok

而当你不使用这些语法的时候,只写 uri 的时候:

/ 表示通用匹配:

location / {     
    [ configuration ] 
}

# /index.html ok
location /test {
    [ configuration ] 
}

# /test ok
# /test2 ok
# /test/ ok

匹配顺序

location 的定义分为两种:

  • 前缀字符串(prefix string)
  • 正则表达式(regular expression),具体为前面带 ~* 和 ~ 修饰符的

在优先级上,= 修饰符最高,^~ 次之,再者是正则,最后是前缀字符串匹配。在使用前缀字符串的 locations 中选择最长匹配的,并将结果进行储存。

示例

server {
    location /doc {
        [ configuration A ] 
    }
    location /docu {
        [ configuration B ] 
    }
}

# 请求 /document 使用 configuration B
# 虽然 /doc 也能匹配到,但在顺序上,前缀字符串顺序不重要,按照匹配长度来确定
server {
    location ~ ^/doc {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但正则表达式则按照定义顺序
server {
    location ^~ /doc {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但 ^~ 的优先级更高
server {
    location /document {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

# 请求 /document 使用 configuration B
# 虽然 /document 也能匹配到,但正则的优先级更高

root 与 alias 的区别

当我们这样设置 root 的时候:

location /i/ {
    root /data/w3;
}

当请求 /i/top.gif ,/data/w3/i/top.gif 会被返回。

当我们这样设置 alias 的时候:

location /i/ {
    alias /data/w3/images/;
}

当请求 /i/top.gif ,/data/w3/images/top.gif 会被返回。

root 是直接拼接 root + location,alias英文意思为别名[ˈeɪliəs],不管请求地址是什么,都是在alias定义的目录下找。

比如刚才的请求时/i/top.gif ,直接的请求路径就是 /data/w3/images/ + top.gif

所以如果你这样使用 allias 定义一个路径:

location / {
    alias /data/w3/images/;
}

请求是 a/b/i/top.gif ,最终请求地址为 /data/w3/images/ top.gif

server 和 location 中的 root

server 和 location 中都可以使用 root,举个例子:

http { 
  server {
      listen 80;
        server_name www.yayujs.com;
        root /home/www/website/;
        location / {
          root /home/www/ts/;
          index index.html;
        }
  }
}

如果两者都出现,是怎样的优先级呢?

简单的来说,就是就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。

相关文章
|
1月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
79 7
|
2月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
325 0
|
4天前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
32 5
|
28天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
1月前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
19天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
39 3
|
1月前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
244 1
nginx配置反向代理404问题
|
28天前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
49 4
|
28天前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
52 3
|
28天前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
102 3