[TOC] ## root与alias区别 ~~~ location ^~ /admin { alias /var/www/admin/; index regist.html; } location / { root /data/html/; index index.html index.html; } ~~~ 复制 * root的处理结果是:root路径+location路径 * alias的处理结果是:使用alias路径替换location路径 * alias是一个目录别名的定义,root则是最上层目录的定义 * 重要的区别是alias后面必须要用“/”结束,而root不强制 ### root与alias 后跟 "/" 的区别 ~~~ location ^~ /dev-popularize/ { # 必须有 dev-popularize 这个目录,静态资源文件都在这个目录下 root /Users/wxq/Desktop/shounaer/dist; # 不需要有 dev-popularize 这个目录,静态资源文件直接放在dist目录下 root /Users/wxq/Desktop/shounaer/dist/; # 则 dist 目录下,无论有没有dev-popularize 都不行,会报 403 alias /Users/wxq/Desktop/shounaer/dist; # 则 dist 目录下,直接放你的静态资源文件就行 # alias /Users/wxq/Desktop/shounaer/dist/; index regist.html; } ~~~ ## location 开头 语法规则:`location \[ = | ~ | ~ \* | ^~ \] /uri/ { … }` ### 以 = 开头,表示精确匹配 ~~~ # 精确匹配,必须是127.0.0.1/ location = / { #规则A } # 精确匹配,必须是127.0.0.1/login location = /login { #规则B } ~~~ ### 以 ^~ 开头,表示uri以某个常规字符串开头 nginx不对url做编码 ~~~ ## 非精确匹配,并且不区分大小写,比如127.0.0.1/static/js. location ^~ /static/ { #规则C } ~~~ ### ~ 开头,表示区分大小写的正则匹配 ~~~ location ~ \.(gif|jpg|png|js|css)$ { #规则D } ~~~ ### ~\* 开头,表示不区分大小写的正则匹配 ~~~ ## 不区分大小写,匹配.png结尾的 location ~* \.png$ { #规则E } ~~~ ### !~ 和!~\* 分别为区分大小写不匹配及不区分大小写不匹配 的正则 ~~~ ## 区分大小写,匹配不以.xhtml结尾的 location !~ \.xhtml$ { #规则F } location !~* \.xhtml$ { #规则G } ~~~ ### / 通用匹配,任何请求都会匹配到 ~~~ location / { #规则H } ~~~ ## 匹配顺序 首先匹配= ; 其次匹配^~; 再其次是按文件中顺序的正则匹配; 最后是交给 / 通用匹配; 当有匹配成功时候,停止匹配,按当前匹配规则处理请求 ## ** Nginx常规配置** ~~~ ``` / 基于uri目录匹配 =表示把URI作为字符串,以便与参数中的uri做完全匹配 ~表示正则匹配URI时是字母大小写敏感的 ~\*表示正则匹配URI时忽略字母大小写问题 ^~表示正则匹配URI时只需要其前半部分与uri参数匹配即可 ``` ``` location = /baidu.html { proxy_pass http://www.baidu.com; } location /static { #root的处理结果是:root路径+location路径 #root /usr/www/; #alias的处理结果是:使用alias路径替换location路径 alias /usr/www/static/; index index.html; } #下载限速 location /download { alias /usr/www/download/; \# 限速2m limit_rate 2m; \# 30m之后限速 limit_rate_after 30m; } location ~\* \\.(gif|png|jpg|css|js)$ { root /usr/www/static/; } ~~~