nginx配置之location详解

一、location的作用

通过指定的模式与客户端请求的URI相匹配

通俗点讲,就是将客户端请求的URI解析到对应的文件或目录中(个人理解)

二、location的用法

用法: location 修饰符 匹配模式

如:

  1. location = /503.html{
  2. root html;
  3. }

其中,上面的 =为修改符, /503为匹配模式

修饰符分为=~~*@(当然还有空修改符,就是没有修饰符)

(1)精确匹配:修饰符为=的情况

这种匹配模式要求比较严格,即客户端请求的URI与匹配模式安全一致时才会真正匹配

  1. location / {
  2. root /webdata/www/;
  3. index index.html index.htm;
  4. }
  5. locatiion = /403.html {
  6. root html;
  7. }

我们在/webdata/www下建立一个文件403.html,内容如下:

  1. /webdata/www/403.html

再在/usr/local/nginx/html/下建立一个文件403.html,内容如下:

  1. html/403.html

我们在浏览器中输入:http://192.168.18.106/403.html (我的虚拟服务器的IP 为192.168.18.106)

看到的结果是:html/403.html

因为它实际访问的是/usr/local/nginx/html/403.html这个文件

(2)一般匹配:没有修饰符的情况(是一种包含的关系)

如:

  1. location /uploads/ {
  2. root /webdata/www/attachments/;
  3. }

在浏览器中输入 http://192.168.18.106/uploads/icon.jpg

那么它实际访问的是/webdata/www/attachments/uploads/下的icon.jpg文件

如果我们想访问uploads这个文件夹的文件实际指向attachments目录,而非attachments下的uploads这个目录呢,那我们会用到alias这个指令

alias用于指定虚拟目录,用法:

alias 目录名

如:

  1. location /uploads/ {
  2. alias /webdata/www/attachments/;
  3. }

再次在浏览器中输入 http://192.168.18.106/uploads/icon.jpg

这次它实际访问的是/webdata/www/attachments下的icon.jpg

(3)正则匹配:修饰符为~或~*等情况
  • ~*代表不区分大小写

  • *代表区分大小写

  • ~^ 以某个正则模式开头

使用一个正则表达式来匹配请求的URI

如:

如果用户请求是图片时,我们将它设定一个缓存期为一天

  1. location ~* .(jpg|png|gif|jpeg)$ {
  2. expires 1d;
  3. }

关于匹配的顺序:

  • (1)优先匹配精确匹配的区段,如果精确匹配符合URI的匹配要求,则返回,不再往下匹配,如果不匹配,再往下匹配

  • (2)如果一般匹配匹配成功,则记录最匹配的部分

  • (3)如果正则匹配匹配成功,则返回,不再往下匹配,如果匹配不成功,则返回一般匹配中记录的最匹配的部分