location语法介绍

location的详细使用


在没有使⽤正则表达式的时候,nginx会先在server中的多个location选取匹配度最⾼的⼀个uri,uri是⽤⼾请求的字符串,即域名后⾯的web⽂件路径,然后使⽤该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使⽤此location处理此请求。

语法规则: location [=|~|~*|^~] /uri/ { … }
=   #⽤于标准uri前,需要请求字串与uri精确匹配,如果匹配成功就停⽌向下匹配并⽴即处理请求。
~   #⽤于标准uri前,表⽰包含正则表达式并且区分⼤⼩写,并且匹配
!~  #⽤于标准uri前,表⽰包含正则表达式并且区分⼤⼩写,并且不匹配
~*  #⽤于标准uri前,表⽰包含正则表达式并且不区分⼤写,并且匹配
!~* #⽤于标准uri前,表⽰包含正则表达式并且不区分⼤⼩写,并且不匹配
^~  #⽤于标准uri前,表⽰包含正则表达式并且匹配以什么开头
$   #⽤于标准uri前,表⽰包含正则表达式并且匹配以什么结尾
\   #⽤于标准uri前,表⽰包含正则表达式并且转义字符。可以转. * ?等
*   #⽤于标准uri前,表⽰包含正则表达式并且代表任意⻓度的任意字符

1. 匹配案例-精确匹配:

在server部分使⽤location配置⼀个web界⾯,要求:当访问nginx 服务器的/login的时候要显⽰指定html⽂件的内容:

# 上传一张图片到PC的网页目录下
[root@ubuntu ~]#rz -E
rz waiting to receive.
[root@ubuntu ~]#ll
total 712
drwx------  4 root root   4096 Jan  7 16:10 ./
drwxr-xr-x 25 root root   4096 Jan  5 17:17 ../
-rw-r--r--  1 root root 663409 Jan  7 16:08 0df37fc399e418555c7f002caf605594.jpg
-rw-------  1 root root   5374 Jan  5 19:58 .bash_history
-rw-r--r--  1 root root   3147 Jan  3 21:22 .bashrc
drwx------  2 root root   4096 Jan  3 20:45 .cache/
drwx------  3 root root   4096 Jan  3 20:45 .gnupg/
-rw-r--r--  1 root root    148 Aug 17  2015 .profile
-rw-------  1 root root  24921 Jan  7 16:10 .viminfo
-rw-------  1 root root    156 Jan  7 15:56 .Xauthority
[root@ubuntu ~]#mv 0df37fc399e418555c7f002caf605594.jpg /data/nginx/html/pc/1.jpg
# 修改配置文件添加一个location的精确匹配
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
server {
        listen      80;
        server_name www.OpengSD.net;
        charset utf-8;

        location / {
            root /data/nginx/html/pc;
            index index.html index.htm;
       }
        location = /1.jpg {               # 在这里添加一个精确匹配的location
            root /data/nginx/html/pc;  
            index index.html;
       }
}
# 重启服务
[root@ubuntu ~]#systemctl restart nginx.service 
  • 访问测试
    在这里插入图片描述

2. 匹配案例-区分⼤⼩写:

如果uri中包含⼤写字⺟,则此条件不匹配

# 修改配置文件匹配正则表达式写法
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
        location ~ /Am.jpg {
                root /data/nginx/html/pc;
                index index.html;
        }

[root@ubuntu ~]#mv /data/nginx/html/pc/1.jpg /data/nginx/html/pc/Am.jpg  # 准备测试图片
[root@ubuntu pc]#cp Am.jpg AM.jpg
[root@ubuntu pc]#ll
total 1308
drwxr-xr-x 2 root root   4096 Jan  8 19:28 ./
drwxr-xr-x 4 root root   4096 Jan  5 19:18 ../
-rw-r--r-- 1 root root 663409 Jan  7 16:08 Am.jpg
-rw-r--r-- 1 root root 663409 Jan  8 19:28 AM.jpg
-rw-r--r-- 1 root root    176 Jan  5 18:51 index.html

[root@ubuntu ~]#systemctl restart nginx.service   # 重启服务
  • 报错
    在这里插入图片描述
  • 精确Am才可以访问
    在这里插入图片描述

3. 匹配案例-不区分⼤⼩写:

对⽤⼾请求的uri做模糊匹配,也就是uri中⽆论都是⼤写、都是⼩写或者⼤⼩写混合,此模式也都会匹配,通常使⽤此模式匹配⽤⼾request中的静态资源并继续做下⼀步操作。

[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
            location ~* /Am.jpg {
                root /data/nginx/html/pc;
                index index.html;
        }
[root@ubuntu pc]#ll  # 测试页面
total 1308
drwxr-xr-x 2 root root   4096 Jan  8 19:39 ./
drwxr-xr-x 4 root root   4096 Jan  5 19:18 ../
-rw-r--r-- 1 root root 663409 Jan  7 16:08 1.jpg
-rw-r--r-- 1 root root 663409 Jan  8 19:38 am.jpg
-rw-r--r-- 1 root root    176 Jan  5 18:51 index.html

[root@ubuntu ~]#systemctl restart nginx.service
访问测试:http://www.OpengSD.net/aM.jpg #直接访问资源名称即可
--------------------------------------------------------
精确匹配指定名称:
# location ~ /am.jpg {
# index index.html;
# root /data/nginx/html/pc;
# }
location ~* /am.jpg {
    index index.html;
    root /data/nginx/html/pc;
}
重启Nginx并访问测试
对于不区分⼤⼩写的location,则可以访问任意⼤⼩写结尾的图⽚⽂件,如区分⼤⼩写则只能访问am.jpg,不区分⼤
⼩写则可以访问am.jpg以外的资源⽐如Am.JPG、aM.jPG这样的混合名称⽂件,但是要求nginx服务器的资源⽬录有
相应的⽂件,⽐如有Am.JPG有aM.jPG。
  • 不区分大小写访问测试
    在这里插入图片描述
    在这里插入图片描述
  • 精确匹配访问测试
    在这里插入图片描述

4. 匹配案例-URI开始:

[root@ubuntu dc]#vim /apps/nginx/conf/conf.d/pc.conf
        location ^~ /images {
                root /data/nginx;   # 以这个目录为根(调用路径/data/nginx/images/index.html)
                index index.html;
        }
        location /images1 {    # 这个目录可以没有,因为alias是重定向到下面这个文件夹里不访问images1。(调用路径/data/nginx/html/pc/index.html)
                alias /data/nginx/html/pc;
                index index.html;
        }
[root@ubuntu ~]#/apps/nginx/sbin/nginx -t  # 检查语法
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

[root@ubuntu dc]#mkdir /data/nginx/images
[root@ubuntu pc]#vim /data/nginx/images/index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
        <title>taotaobao 博客</title>
        </head>
        <body>
        <h2>images</h2>
        </body>
        </html>
[root@ubuntu pc]#vim /data/nginx/html/pc/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
        <title>taotaobao 博客</title>
        </head>
        <body>
        <h2>淘淘宝博客PC网址</h2>
        </body>
        </html>
  • images测试访问
    在这里插入图片描述
  • images1测试访问
    在这里插入图片描述

5. 匹配案例-文件名后缀:

[root@ubuntu images1]#vim /apps/nginx/conf/conf.d/pc.conf
 location ~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {
                root /data/nginx/images1;
                index index.html;
        }

[root@ubuntu ~]#mkdir /data/nginx/images1
[root@ubuntu ~]#cd /data/nginx/images1
[root@ubuntu images1]#rz -E
rz waiting to receive.
[root@ubuntu images1]#ll
total 3916
drwxr-xr-x 2 root root    4096 Jan  9 12:25 ./
drwxr-xr-x 5 root root    4096 Jan  9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan  9 12:25 抽象风景,树,房子,草地,风景图片_彼岸图网.jpg
[root@ubuntu images1]#mv 抽象风景,树,房子,草地,风景图片_彼岸图网.jpg 1.jpg
[root@ubuntu images1]#rz -E
rz waiting to receive.
[root@ubuntu images1]#ll
total 10092
drwxr-xr-x 2 root root    4096 Jan  9 12:53 ./
drwxr-xr-x 5 root root    4096 Jan  9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan  9 12:25 1.jpg
-rw-r--r-- 1 root root 6322551 Jan  9 12:53 Devils_Bridge_桥梁和绿色树木_河流_倒映6k自然风景壁纸_彼岸图网.jpg
[root@ubuntu images1]#mv Devils_Bridge_桥梁和绿色树木_河流_倒映6k自然风景壁纸_彼岸图网.jpg 1.png
[root@ubuntu images1]#ll
total 10092
drwxr-xr-x 2 root root    4096 Jan  9 12:54 ./
drwxr-xr-x 5 root root    4096 Jan  9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan  9 12:25 1.jpg
-rw-r--r-- 1 root root 6322551 Jan  9 12:53 1.png

[root@ubuntu images1]#systemctl restart nginx.service 
  • 访问测试
    在这里插入图片描述
    在这里插入图片描述

6. 匹配案例-优先级:

[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
 location ~* /1.jpg {
                root /data/nginx/images;
                index index.html;
        }
        location = /1.jpg {
                root /data/nginx/html/pc;
                index index.html;
        }

# 注释掉精确匹配在测试一次查看images文件夹的图片
        #location = /1.jpg {
        #       root /data/nginx/html/pc;
        #       index index.html;
        #}

匹配优先级:=, ^~, ~/~*,/
location优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
  • 访问的是精确匹配对应的图片
    在这里插入图片描述
  • 注释测试
    在这里插入图片描述
    以此得出精确匹配的优先级高于模糊匹配

7. 生产使用案例:

直接匹配网站根会加速Nginx访问处理:
location = / {
......;
}
location / {
......;
}
静态资源配置:
location ^~ /static/ {
......;
}
# 或者
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
......;
}
多应用配置
location ~* /app1 {
......;
}
location ~* /app2 {
......;
}
    location的大致使用方式和我的理解就写到这了,对于前面的配置文件和目录都是在上一篇博客写的可以参考。

上篇博客

posted @ 2020-01-09 14:12  鱼与于玉  阅读(1281)  评论(3编辑  收藏  举报