这里介绍一个虚拟主机的配置结构,首先看一下虚拟主机的最小化配置。

#/etc/nginx/conf.d/yxjc123.conf
server {  
    listen 80;  
    server_name yxjc123.com
  
    return 200 "Hello";  
 } 
以上便是nginx虚拟主机的最小化配置。接下来,我们在上面最小化配置的基础上,讲解rootlocationtry_files指令。

root指令

root 指令用于配置请求的根目录,允许 nginx 将传入的请求映射到文件系统上。

server {  
  listen 80;  
  server_name yxjc123.com;  
  root /home/www/yxjc123;  
}  
它可以根据服务器的路径返回相应的内容。如:

yxjc123.com/abc.html 则返回 /home/www/yxjc123/abc.html。

yxjc123.com/path/hello.html 则返回 /home/www/yxjc123/path/hello.html。

location指令

location指令用于对请求的url配置相应的路径或者反向代理。

简单来说location指令用于配置url的匹配模式。

它的语法是  location [modifier] path 。例如:

location /abc{  
  # ...  
}  

没有修饰符(modifier)的时候,路径后面可以匹配任意url,上面的例子可能匹配如下:

/abc
/abcc  
/abc123  
/abc/def/index.html  
...  
在一个虚拟主机的配置中,我们也可以使用多个location指令。
server {  
  listen 80;  
  server_name yxjc123.com;  
  root /hom/www/yxjc123;  
  
  location / {  
    return 200 "root";  
  }  
  
  location /abc{  
    return 200 "abc";  
  }  
}  

nginx也提供了一些可以与location相结合使用的修饰符

  • = - 完全匹配
  • ^~ - 优先匹配
  • ~ && ~* - 正则表达式匹配
  • no modifier  - 前缀匹配

在匹配顺序上,nginx根据上面的规则优先级由高到底的权重依次匹配,其中完全匹配的优先级最高。其次是优先匹配,然后是正则表达式。

location /match {  
  return 200 '前缀匹配';  
}  
  
location ~* /match[0-9] {  
  return 200 '正则匹配不区分大小写';  
}  
  
location ~ /MATCH[0-9] {  
  return 200 '正则匹配区分大小写';  
}  
  
location ^~ /match0 {  
  return 200 '优先匹配';  
}  
  
location = /match {  
  return 200 '完全匹配';  
}  

try_files  指令

try_file 指令位于location 指令块中。 try_files 指令语法如下:

location / {
    try_files $uri $uri/ /default/index.html;
}
在该配置中首先尝试$uri请求时候的文件时候存在,如果不存在则返回 /default/index.html。

举例说明 。

访问 yxjc123.com/abc/hello.html 不存在时,则返回 /default/index.html。