location指令

location看起来挺难,实际上用不了这么多东西,用的最多的就是默认location改,或者是默认的加虚拟主机。

1.location位置

location一般放在server里,每一个server都是一个虚拟主机,也就是说一个每一个server网站。在这个网站里要访问某一个资源,就得做定位,location就是用来做定位的。

Nginx 的 HTTP 配置主要包括三个区块,结构如下:

http {                        # 协议块/http的配置
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
  server {                  # 服务块/server的配置
      listen 80;
      server_name localhost;
      location / {     # 请求块/location的配置
          root html;
          index index.html index.htm;
      }
  }
}

- location 是在 server 块中配置,根据不同的 URI 使用不同的配置,来处理不同的请求。

- location 是有顺序的,会根据不同请求配置的优先级来匹配的location 处理。
基本语法如下:

location [=|~|~*|^~|@] pattern{……}

2.location 前缀含义

例如 第一个/就代表第二个位置。第二个位置就是代表root目录指定的根目录。

 例如:在浏览器访问写http://web1.server.com/htmld地址,就会访问到/html位置。

因为它是做定位的,根据浏览器里写的路径,去访问不同的资源。(每一个location下面可能有不同的资源)

location后面的前缀可以写很多东西,平时都是直接一个location后面跟目录。

比如:有好多html开头的目录,^html*,但是默认情况下,nginx不认识,想让location认识就得在前面加一个符号location ~^html*。~匹配。

=    表示精确匹配,优先级也是最高的  (平时在使用location后面符号的时候如果想精确匹配也可以不写=,就用默认的写路径就是精确匹配)
^~   表示uri以某个常规字符串开头,理解为匹配url路径即可 (^~html 以html开头)

常规字符串:把认识的那些正则表达式特殊符号去掉,剩下的普通的abcd就是常规字符串。
~    表示区分大小写的正则匹配  ( ~html )
~*   表示不区分大小写的正则匹配
!~   表示区分大小写不匹配的正则
!~*  表示不区分大小写不匹配的正则
/    通用匹配,任何请求都会匹配到根(平时都是直接写/,啥都不写,而且直接匹配到/)
@    内部服务跳转  

例如:内部服务跳转(这种需求特别少)

 如果状态码是404则输出某个东西,它会跳转到ip_err,是返回的503代码。最终表示的意思是,当客户端访问ip路径的时候,正常情况下应该返回404的错误,但最终返回503的错误。因为做了一个内部跳转,其实就是location和location的跳转。这种没必要,还不如直接把503给它。

查找顺序和优先级

location是有优先级的,匹配范围越大越模糊,越模糊的优先级越低,越精确的优先级越高。但是有一个特列/,/是优先级最低的。

= 大于 ^~  大于 ~|~*|!~|!~* 大于 /       /是优先级最低的。
多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

location 配置示例

1、没有修饰符 表示:必须以指定模式开始

 location  /abc {
        root    /home/www/nginx;

}

只有在浏览器中写了/abc,它才会访问这个目录/home/www/nginx;下面的页面,要是不写它就访问不了。

cd /usr/share/nginx一般发布网站的默认路径没有什么要求,不要去改。

 vim /etc/nginx/conf.d/default.conf

 

浏览器访问写ip+abc   没有修饰符 表示:必须以指定模式开始

 

 2、=表示:必须与指定的模式精确匹配

 3、~ 表示:指定的正则表达式要区分大小写

它把/abc当成了正则表达式,并不是当成精确匹配的东西,只不过是因为写的a只能表示a,b表示b,c表示c。ab*访问abc的时候也能用

重启

 

 写abd也可以,但是在配置文件里没有明确的写abd但是也能匹配到,这就是正则匹配。

写~*(不区分大小写)

[root@k ~]# systemctl restart nginx  重启nginx服务,去网站访问。

【注意】多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

猜你喜欢

转载自blog.csdn.net/weixin_53150440/article/details/127250209