root
- nginx中root指令的地址,其实是替换了匹配后的url中的host。
- root指令最后的斜杠可加可不加。多个斜杠在nginx中相当于一个~
- 如果不匹配location,则寻找更外层的root做替换(外层没有location会使用nginx默认的一个location)
alias
- alise并不是替换host,而是替换匹配部分的host,别名一个路径(也就是说,path目录不需要真实存在alias指定的目录中)
- alise指令后面必须加 / http://test.com/aa/aa eg: alise /www/aa/ 如果alise中aa后面没有 / 则会匹配 。 http://test.com/aaaa
-
通常最佳实际是配置一个项目的根root,其他的文件夹则使用alias
如下一例:
server {
listen 80;
server_name www.wangshibo.com;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
location / {
root /var/www/html;
}
location /haha { //匹配的path目录haha不需要真实存在alias指定的目录中
alias /var/www/html/ops/; //后面的"/"符号一定要带上
rewrite ^/opp/hen.php(.*)$ /opp/hen.php?s=$1 last;
# rewrite ^/opp/(.*)$ /opp/hen.php?s=$1 last;
}
location /wang { //匹配的path目录wang一定要真实存在root指定的目录中(就/var/www/html下一定要有wang目录存在)
root /var/www/html;
}
}
Tip:
- alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
- root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
扩展
location配置
1. 语法规则(按优先级)
= 表示精确匹配,优先级最高
^~ 表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格))
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
!~ 表示区分大小写不匹配的正则
!~* 表示不区分大小写不匹配的正则
/ 表示通用匹配,任何请求都会匹配到