我是靠谱客的博主 勤奋金鱼,最近开发中收集的这篇文章主要介绍Nginx服务器Location规则,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Location 基础知识:

1.1 概念:

我们可以通过配置location指令块,来决定客户端发送过来的请求URL如何处理

1.2 语法:

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location

location 配置可以有两种配置方法,可以在server指令块和location指令块配置。
1、修饰符 + uri(资源路径)
2、@ + name

1.2.1 修饰符

  • ~ :大小写敏感(正则表达式)
  • = : 精确匹配(必须全部相等)
  • ~*:忽略大小写(正则表达式),这里要注意忽略大小写的意思是请求的字符大小写都可以, 但是不会进行大小转换,请求的大小写对应的文件必须存在。
  • ^~ :只需匹配uri部分
  • @ :内部服务跳转

2.location配置实例

2.1 精确匹配

=,精准匹配,一般是匹配某个具体文件

location = /index.html {
  [ configuration ]
}
# 则匹配到`http://www.v1jfedu.com/index.html`这种请求。

2.2 大小写铭感匹配

~ :大小写敏感(正则表达式)

 location ~ /LUTIXIA/ {
    [ configuration ]
 }
 #请求示例
 #http://www.v1.jfedu.com/LUTIXIA/ [成功]
 #http://www.v1.jfedu.com/lutixia/ [失败]

2.3 大小写不敏感匹配

~:忽略大小写(正则表达式)*

location ~* /lutixia.html {
    [ configuration ]
}
# 则会忽略 uri 部分的大小写
#http://www.v1.jfedu.com/jfedu.html [成功] 可以成功匹配,但是目录中要lutixia.html文#http://www.v1.jfedu.com/JFEDU.html [成功] 可以成功匹配,但是目录中要LUTIXIA.html文

2.4 指定后缀匹配

匹配以gif、jpg、jpeg结尾的文件

location ~* .(gif|jpg|jpeg)$ {
 [ configuration ]
}
#http://www.iflytek.com/img/iflytek.jpg [成功]

2.5 忽略正则匹配

location ^~ /img/ {
   [ configuration ]
}
#以 /img/ 开头的请求,都会匹配上
#http://www.iflytek.com/img/iflytek.jpg  [成功]
#http://www.iflyek.com/img/iflytek.png [成功]

如果配置了2.5,那么所有请求 /img/ 下的图片会被上面的处理,因为 ^~ 指令匹配到了,则不检查正则
表达式。对比这两个location,可以设置不同目录,相同文件进行实验。

3.Location 优先级

在这里插入图片描述
以上四个匹配优先级最高的为精准匹配
在这里插入图片描述
注释精准匹配,结果如下:
在这里插入图片描述
注释忽略正则匹配,结果如下:
在这里插入图片描述
注,第二个和的第三个规则都是正则,这时会按照至上而下的顺序匹配。

4.rewrite规则

Nginx的rewrite功能需要pcre软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。
默认参数编译nginx就会支持rewrite的模块,但是也必须要pcre的支持。
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

rewrite  <regex>  <replacement>  [flag];
            正则     替代内容      flag标记
            
正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

# flag标记说明:
last  #本条规则匹配完成终止当前location的规则,继续向下匹配新的location URI规则
break  #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址,关闭服务,无法重定向。
permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,关闭服务,依然可以重定向,清除缓存失效

5. rewrite实例:

5.1 实现域名跳转

要求:访问v1.jfedu.net 跳转到 v2.jfedu.net

    server {
       listen      80;
       server_name  v1.jfedu.net;

       root   /home/hadoop/nginx/v1;
       index  index.html index.htm;
       rewrite ^/(.*)$ http://v2.jfedu.net:8082/$1 permanent;
       # 正则 ^/(.) 表示匹配所有的请求,匹配成功后,跳转到后面指定的url地址
       # $1是取出前面正则表达式分组括号里的内容

       charset utf-8;
       access_log  logs/host.access.log  main;
       }
 ############################################################
 server {
        listen       8082;
        server_name  v2.jfedu.net;
        charset utf-8;
        access_log  logs/v3.access.log  jfedu;
        location / {
            root   /home/hadoop/nginx/v2;
            index  index.html index.htm;
        }
}
###两个server可以同时写在nginx.conf中,为实验方便,
###将server分开在单独两个文件中。前面章节说过 include参数:include vhost/*.conf;

在这里插入图片描述

5.2 实现浏览器的语言跳转

要求:当页面为中文语言时,打印this is 中文

    server {
       listen      80;
       server_name  v1.jfedu.net;

       root   /home/hadoop/nginx/v1;
       index  index.html index.htm;
#       rewrite ^/(.*)$ http://v2.jfedu.net:8082/$1 permanent;

       charset utf-8;
       access_log  logs/host.access.log  main;

       if ( $http_accept_language ~ "^zh-CN" ) {
                rewrite ^/$ /zh;
                }
       if  ( $http_accept_language ~ "^en") {
                rewrite ^/$ /en;
                }
       }

在这里插入图片描述
在 /home/hadoop/nginx/v1目录下创建目录

mkdir  -p  /home/nginx/v1/{zh,en}
echo "this is  中文" >   /home/nginx/v1/zh/index.html
echo "this is  English" >  /home/nginx/v1/en/index.html

访问如下:
在这里插入图片描述
调整浏览器的语言,结果如下
在这里插入图片描述

5.3.实现不同终端跳转

(1) 通过安卓ios等不通的操作系统,访问的页面不同

    server {
       listen      80;
       server_name  v1.jfedu.net;

       root   /home/hadoop/nginx/v1;
       index  index.html index.htm;
       charset utf-8;
       access_log  logs/host.access.log  main;
       
        if ( $http_user_agent ~* "iphone|android") {
                rewrite ^/(.*) http://m.jfedu.net/$1;
                }
               
############################################################3

(2) 发布一个手机终端界面:


 mkdir  -p /home/hadoop/nginx/m
 echo "this is iphone" > m/index.html
 ##################################################
    server {
       listen      80;
       server_name  m.jfedu.net;

       root   /home/hadoop/nginx/m;
       index  index.html index.htm;
           }

重启服务,访问页面,并且切换浏览器为iphone终端:
在这里插入图片描述

最后

以上就是勤奋金鱼为你收集整理的Nginx服务器Location规则的全部内容,希望文章能够帮你解决Nginx服务器Location规则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部