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配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。