• Nginx核心配置-location的匹配案例实战篇


                Nginx核心配置-location的匹配案例实战篇

                                           作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.location语法规则介绍

      在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。
    
    
      语法规则: location [=|~|~*|^~] /uri/ { … }
        =: 
          用于标准uri前,需要请求字串与uri精确匹配,如果匹配成功就停止向下匹配并立即处理请求。
        ~: 
          用于标准uri前,表示包含正则表达式并且区分大小写
        ~*:
          用于标准uri前,表示包含正则表达式并且不区分大写
        !~: 
          用于标准uri前,表示包含正则表达式并且区分大小写不匹配
        !~*: 
          用于标准uri前,表示包含正则表达式并且不区分大小写不匹配
        ^~: 
          用于标准uri前,表示包含正则表达式并且匹配以什么开头
        $: 
          用于标准uri前,表示包含正则表达式并且匹配以什么结尾
        : 
          用于标准uri前,表示包含正则表达式并且转义字符。可以转. * ?等
        *:
          用于标准uri前,表示包含正则表达式并且代表任意长度的任意字符

    二.匹配案例-精确匹配

    1>.编辑主配置文件(本篇博客试验过程并不修改主配置文件内容哟)

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf/nginx.conf
    worker_processes  4;
    worker_cpu_affinity 00000001 00000010 00000100 00001000; 
    
    events {
        worker_connections  100000;
        use epoll;
        accept_mutex on;
        multi_accept on; 
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        gzip  on;
        charset utf-8;
        keepalive_timeout  65 65;
         
        #导入其他路径的配置文件
        include /yinzhengjie/softwares/nginx/conf.d/*.conf;
    }
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.编辑子配置文件

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/location.conf 
    server {
        listen 80;
        server_name node101.yinzhengjie.org.cn;
    
        location / {
            root /yinzhengjie/data/web/nginx/html/image;
            index index.html;
        }
    
        location /01.jpg {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    }
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.创建测试数据

    [root@node101.yinzhengjie.org.cn ~]# ll
    total 364
    -rw-r--r-- 1 root root 248743 Dec 15 22:38 01人柱力.jpg
    -rw-r--r-- 1 root root 122026 Dec 16  2019 02.迪丽热巴.jfif
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 01人柱力.jpg /yinzhengjie/data/web/nginx/html/image/01.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 02.迪丽热巴.jfif /yinzhengjie/data/web/nginx/html/01.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll -R /yinzhengjie/data/web/nginx/html/
    /yinzhengjie/data/web/nginx/html/:
    total 124
    -rw-r--r-- 1 root root 122026 Dec 16 19:35 01.jpg
    drwxr-xr-x 2 root root     38 Dec 16 19:35 image
    -rw-r--r-- 1 root root     88 Dec 15 23:13 index.html
    
    /yinzhengjie/data/web/nginx/html/image:
    total 248
    -rw-r--r-- 1 root root 248743 Dec 16 19:35 01.jpg
    -rw-r--r-- 1 root root     49 Dec 15 23:07 index.html
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    4>.启动nginx服务

    [root@node101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                         Local Address:Port                                                        Peer Address:Port              
    LISTEN     0      128                                                        *:22                                                                     *:*                  
    LISTEN     0      128                                                       :::22                                                                    :::*                  
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                         Local Address:Port                                                        Peer Address:Port              
    LISTEN     0      128                                                        *:80                                                                     *:*                  
    LISTEN     0      128                                                        *:22                                                                     *:*                  
    LISTEN     0      128                                                       :::22                                                                    :::*                  
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    5>.浏览器访问"http://node101.yinzhengjie.org.cn/01.jpg",如下图所示,它并没有显示火影忍者关于人柱力的图片,而是显示了精确匹配的图片,因此我们得出精确匹配优先级高的结论。

    三.匹配案例-区分大小写

    1>.编写子配置文件

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/location.conf 
    server {
        listen 80;
        server_name node101.yinzhengjie.org.cn;
    
        location / {
            root /yinzhengjie/data/web/nginx/html/image;
            index index.html;
        }
    
        location ~ /F.?.JPG {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    }
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.创建测试数据

    [root@node101.yinzhengjie.org.cn ~]# cd /yinzhengjie/data/web/nginx/html/
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# ll
    total 124
    -rw-r--r-- 1 root root 122026 Dec 16 19:35 01.jpg
    drwxr-xr-x 2 root root     38 Dec 16 19:35 image
    -rw-r--r-- 1 root root     88 Dec 15 23:13 index.html
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# cp 01.jpg Fg.JPG
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# cp 01.jpg Fg.jpg
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# ll
    total 364
    -rw-r--r-- 1 root root 122026 Dec 16 19:35 01.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 20:10 Fg.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 20:03 Fg.JPG
    drwxr-xr-x 2 root root     38 Dec 16 19:35 image
    -rw-r--r-- 1 root root     88 Dec 15 23:13 index.html
    [root@node101.yinzhengjie.org.cn /yinzhengjie/data/web/nginx/html]# 

    3>.重新加载配置文件

    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     4953  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4954  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4955  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4956  4785  0 20:05 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -s reload
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     4953  4785  0 20:05 ?        00:00:00 nginx: worker process is shutting down
    nginx     4966  4785  3 20:05 ?        00:00:00 nginx: worker process
    nginx     4967  4785  2 20:05 ?        00:00:00 nginx: worker process
    nginx     4968  4785  3 20:05 ?        00:00:00 nginx: worker process
    nginx     4969  4785  2 20:05 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    4>.浏览器输入"http://node101.yinzhengjie.org.cn/Fg.jpg"访问小写字母的url,访问不到,因为"jpg"是小写字母,和咱们配置的nginx规则符合,尽管服务器路径下的确存在该文件依旧是无法访问。

    5>.浏览器可以成功访问"http://node101.yinzhengjie.org.cn/Fg.JPG",因为我们写的"JPG"是大写字母,和咱们配置的nginx规则符合

    四.匹配案例-不区分大小写

    1>.编辑子配置文件

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/location.conf 
    server {
        listen 80;
        server_name node101.yinzhengjie.org.cn;
    
        location / {
            root /yinzhengjie/data/web/nginx/html/image;
            index index.html;
        }
    
        #区分大小写
        #location ~ /F.?.JPG {
        #    root /yinzhengjie/data/web/nginx/html;
        #    index index.html;
        #}
    
        #不区分大小写
        location ~* /F.?.JPG {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    }
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.重新加载nginx服务

    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     4966  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4967  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4968  4785  0 20:05 ?        00:00:00 nginx: worker process
    nginx     4969  4785  0 20:05 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -s reload
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     5028  4785  5 20:16 ?        00:00:00 nginx: worker process
    nginx     5029  4785  5 20:16 ?        00:00:00 nginx: worker process
    nginx     5030  4785  5 20:16 ?        00:00:00 nginx: worker process
    nginx     5031  4785  5 20:16 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.浏览器输入"http://node101.yinzhengjie.org.cn/Fg.jpg"访问小写字母的url,如下图所示,可以访问到了,因为咱们没有区分URI的大小写

    4>.浏览器可以成功访问"http://node101.yinzhengjie.org.cn/Fg.JPG",照样是可以正常访问的

    五.匹配案例-URI开始

    1>.编辑子配置文件

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/location.conf 
    server {
        listen 80;
        server_name node101.yinzhengjie.org.cn;
    
        location / {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    
        location ^~ /static {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    }
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.创建测试数据

    [root@node101.yinzhengjie.org.cn ~]# ll
    total 364
    -rw-r--r-- 1 root root 248743 Dec 15 22:38 01人柱力.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 19:58 02.迪丽热巴.jfif
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mkdir /yinzhengjie/data/web/nginx/html/static
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 01人柱力.jpg /yinzhengjie/data/web/nginx/html/static/01.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 02.迪丽热巴.jfif /yinzhengjie/data/web/nginx/html/static/02.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/web/nginx/html/static/
    total 364
    -rw-r--r-- 1 root root 248743 Dec 16 20:40 01.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 20:40 02.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.重新加载nginx配置文件

    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     5028  4785  0 20:16 ?        00:00:00 nginx: worker process
    nginx     5029  4785  0 20:16 ?        00:00:00 nginx: worker process
    nginx     5030  4785  0 20:16 ?        00:00:00 nginx: worker process
    nginx     5031  4785  0 20:16 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -s reload
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     5085  4785  5 20:41 ?        00:00:00 nginx: worker process
    nginx     5086  4785  5 20:41 ?        00:00:00 nginx: worker process
    nginx     5087  4785  5 20:41 ?        00:00:00 nginx: worker process
    nginx     5088  4785  5 20:41 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    4>.如下图所示,浏览器访问“http://node101.yinzhengjie.org.cn/static/01.jpg”,可以访问成功

    5>.如下图所示,浏览器访问“http://node101.yinzhengjie.org.cn/static/02.jpg”,可以访问成功

    六.匹配案例-文件名后缀

    1>.编辑子配置文件

    [root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/location.conf 
    server {
        listen 80;
        server_name node101.yinzhengjie.org.cn;
    
        location / {
            root /yinzhengjie/data/web/nginx/html;
            index index.html;
        }
    
        location ~* .(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {
            root /yinzhengjie/data/web/nginx/static;
            index index.html;
        }
    }
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -t
    nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.创建测试数据

    [root@node101.yinzhengjie.org.cn ~]# mkdir /yinzhengjie/data/web/nginx/static
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp /etc/passwd /yinzhengjie/data/web/nginx/static/passwd.js
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll
    total 364
    -rw-r--r-- 1 root root 248743 Dec 15 22:38 01人柱力.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 19:58 02.迪丽热巴.jfif
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 01人柱力.jpg /yinzhengjie/data/web/nginx/static/01.jpg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp 02.迪丽热巴.jfif  /yinzhengjie/data/web/nginx/static/02.jpeg
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/web/nginx/static/
    total 368
    -rw-r--r-- 1 root root 248743 Dec 16 20:48 01.jpg
    -rw-r--r-- 1 root root 122026 Dec 16 20:49 02.jpeg
    -rw-r--r-- 1 root root   1145 Dec 16 20:48 passwd.js
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.重新加载配置文件

    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     5098  4785  0 20:42 ?        00:00:00 nginx: worker process
    nginx     5099  4785  0 20:42 ?        00:00:00 nginx: worker process
    nginx     5100  4785  0 20:42 ?        00:00:00 nginx: worker process
    nginx     5101  4785  0 20:42 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# nginx -s reload
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
    root      4785     1  0 19:36 ?        00:00:00 nginx: master process nginx
    nginx     5233  4785 11 20:50 ?        00:00:00 nginx: worker process
    nginx     5234  4785 11 20:50 ?        00:00:00 nginx: worker process
    nginx     5235  4785 10 20:50 ?        00:00:00 nginx: worker process
    nginx     5236  4785 11 20:50 ?        00:00:00 nginx: worker process
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    4>.客户端测试访问资源

      浏览器访问:http://node101.yinzhengjie.org.cn/01.jpg,如下图所示,访问成功啦

      浏览器访问:http://node101.yinzhengjie.org.cn/02.jpeg,如下图所示,范围成功啦

      浏览器访问:http://node101.yinzhengjie.org.cn/passwd.js,如下图所示,访问成功啦。

    七.匹配案例-优先级

    匹配优先级:
      =, ^~, ~/~*,/
    location优先级:
      (location
    =) > (location 完整路径) > (location ^~ 路径) > (location~,~* 正则顺序) > (location 部分起始路径) > (/)

    八.生产使用案例

    #直接匹配网站根会加速Nginx访问处理:
    location = / {
      ......;
    }
    location / {
      ......;
    }
    #静态资源配置: location
    ^~ /static/ {   ......; } # 或者 location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {   ......; }
    #多应用配置 location
    ~* /app1 {   ......; } location ~* /app2 {   ......; }
  • 相关阅读:
    Jmeter使用csv文件读取测试数据
    postman入门教程
    VS code 踩坑
    一些安装链接
    Maven笔记
    c++
    更新windows补丁时一直卡在搜索更新
    Java程序设计(第二版)复习 第三章
    Java程序设计(第二版)复习 第二章
    CSS基础一
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12038031.html
Copyright © 2020-2023  润新知