0
点赞
收藏
分享

微信扫一扫

Nginx(二):Location的配置

何晓杰Dev 2023-11-23 阅读 48

由于server中的location配置是前端接触最多的配置项,location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应。所有本文将深入探讨Nginx的location指令的用法,包括基础语法、匹配规则、优先级等,并通过实际配置案例进行讲解。

一、Nginx Location简介

在Nginx中,location是用于匹配请求URI的指令,用于定义如何响应不同URL的请求。它是Nginx配置中最常用且重要的指令之一。通过Location指令,我们可以实现URL路由、负载均衡、静态文件服务等功能。


二、Location语法与匹配规则

  1. 基础语法

location指令的基本语法如下:

location [匹配方式] /uri/ {  
    # 处理规则  
}

其中,匹配方式可以是以下之一:

  • =:表示精确匹配;
  • ~:表示区分大小写的正则匹配;
  • ~*:表示不区分大小写的正则匹配;
  • ^~:表示以指定字符串开头的URI匹配;
  • @:表示定义一个命名的location,用于内部重定向。
  1. 匹配规则优先级

Nginx会按照特定的优先级顺序来匹配location

  1. 精确匹配(=);
  2. 最长字符串匹配(^~);
  3. 正则表达式匹配(~~*);
  4. 默认匹配(没有匹配到以上规则的)。


三、配置案例

下面通过几个实际配置案例来说明Nginx Location的用法。

1. location 匹配所有请求

在下面的示例中,前缀location /将匹配所有请求,但如果没有找到匹配,将作为最后的手段使用。

location / {
    ...
}

2. location 精确URL匹配

NGINX总是首先尝试匹配最特定的前缀位置。因此,以下位置块中的等号强制与请求的路径进行精确匹配,然后停止搜索更多匹配。

location = /images { 
    ...
}

上述位置块将与URL https://domain.com/images匹配,但URL https://domain.com/images/index.html或https://domain.com/images/将不匹配。

3. 目录匹配

下面的位置块将匹配以/images/开头的任何请求,但继续为所请求的URI搜索更具体的块。因此,如果NGINX没有找到任何更具体的匹配,位置块将被选中。

location /images/ {
     ...
}

 4. location RegEx示例

以下位置块中的修饰符^~将导致区分大小写的正则表达式匹配。因此,URI /images或/images/logo.png将被匹配,但一旦找到匹配就停止搜索。

location ^~ /images {
   ...
   ...
}

5. image/css/js文件类型匹配

下一个位置块中的修饰符~*匹配任何以png, ico, gif, jpg, jpeg, css或js结尾的请求(不区分大小写)。但是,对/images/文件夹的任何请求都将由前一个位置块提供服务。

location ~* .(png|ico|gif|jpg|jpeg|css|js)$ {
    ...
    ...
}

6. RegEx区分大小写匹配

以下位置块中的修饰符~会导致大小写敏感的正则表达式匹配,但不会停止搜索更好的匹配。

location ~ /images {
    ...
    ...
}

7. RegEx不区分大小写匹配示例

以下位置块中的修饰符~*将导致不区分大小写的正则表达式匹配,但搜索不会在此停止以寻找更好的匹配。

location ~* /images {
     ...
     ...
}


四、我常用的配置

1. 配置接口的代理

location ^~ /api/ {
   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_pass        http://X.X.X.X:port/;
   #proxy_pass http://X.X.X.X:port/api/;
}


location ^~ /map/ {
    proxy_pass          https://X.X.X.X:port/;
    proxy_redirect      default;
    proxy_set_header    Host    $host:$server_port;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-Host $host;
    proxy_set_header    X-Forwarded-Server $host;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header    Cookie  $http_cookie;
}

2. 配置资源缓存时间

location ~ .*\.(jpg|png|gif|swf|woff|woff2|eot|svg|ttf|otf|mp3|mp4|m4a|aac|txt)$ {
   expires 7d;
   # 如果不希望缓存
   #expires -1;
 }

3. 配置前端项目的二级路径

location /web/ {
    alias F:/nginxDist/manage/web/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
} 


location /web2/ {
    alias F:/nginxDist/manage/web2/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
}


location /web3/ {
    alias F:/nginxDist/manage/web3/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
}

4. 配置前端项目的路径

location / {
    alias F:/nginxDist/reactApp/dist/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
    
    if ($request_filename ~ .*\.(htm|html)$) {
         add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
    }
     if ($request_filename ~ .*\.(js|css|jpg|jpeg|gif|png|ico)$) {
        expires 7d;
    }
}


五、总结与注意事项

通过本文的介绍,我们详细了解了Nginx Location的用法与配置方式。在实际应用中,需要根据具体需求合理设计Location的匹配规则,以确保请求能够正确地被处理和转发。同时,也需要注意Nginx的配置文件的语法和格式,避免因为配置错误导致服务无法正常运行。

举报

相关推荐

0 条评论