server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } location ^~ /static/{ [配置D] } localtion ~* \.(gif|jpg|png){ [配置E] } }
语法:html
location = | ~ | ~* | ^~ | @ /url/{ //注意 =、~、~*、^~ 、@是location的匹配规则,”|“表示或者 “ ......省略其余配置 }
规则说明:nginx
符号 | 含义 |
---|---|
= | 字面精准匹配,若是匹配,则跳出匹配过程(再也不进行正则匹配) |
~ | 开头区分大小写的正则匹配 |
~* | 开头不区分大小写的正则匹配 |
^~ | 开头表示uri以某哥常规字符串开头,理解为匹配url路径便可 |
/ | 通用匹配,在没有正则表达式匹配时,任何请求都会匹配到 |
@ | 不是普通的location匹配,用于location内部重定向的变量 |
~ | 开头区分大小写的正则匹配 |
多个location配置的匹配顺序:正则表达式
注意:每次匹配成功后,中止匹配,会按照本匹配的location处理请求apache
按照上面实例进行说明匹配顺序:浏览器
location = \ { [配置A] }
location ^~ /static/{ [配置D] }
若是以上无任何匹配项则会选择通用选项,并按照所匹配的配置B进行处理请求:bash
location / { [配置B] }
location = / { root /var/ww/html/; }
此规则表示只匹配以默认地址进行访问的请求,访问地址:http://NginxIP/ide
location ^~ /static/ { root /var/www/html/static; }
此规则表示只匹配以" /static/ "开头的地址进行访问的请求,访问地址:http://NginxIP/static/url
location ~* \.(png|gif|jpg){ root /var/www/html/; }
此规则表示只匹配" .png | .gif | *.jpg "的文件,访问地址:http://NginxIP/test.png代理
location ~* /Test/ { root /var/www/html/; }
此规则表示匹配url地址中存在Test的访问请求,不区分大小写test也能够,访问地址:http://NginxIP/test/code
location ~ /Test/{ root /var/www/html/; }
此规则表示匹配url地址中存在Test的访问请求,区分大小写,test是进行匹配的,访问地址:http://NginxIP/Test/
location / { root /var/www/html; }
此规则为默认匹配,他能够匹配全部以默认地址访问的连接,访问地址:http://NginxIP/login.html
location @index_error{ root /var/www/error/ }
此规则表示匹配以 "/index/ "开头的请求,若是连接状态404,会匹配到这条规则
nginx的rewrite功能和apache同样,rewrite的主要功能是实现RUL地址的重定向。Nginx的rewrite功能是由PCRE软件支持,rewrite模块即ngx_http_rewrite_module
模块。从某种意义上能够说为了美观或者搜索引发的友好搜索,提升排名等
server{ listen 80; server_name www.jkyst.xyz jkyst.xyz; if($host != 'www.jkyst.xyz' ){ rewrite ^/(.*)$ http://www.jkyst.xyz/$1 permanent; } location ~.*\.(png|gif|jpg){ return 403; } }
语法:
rewrite regex replacement [flag]
rewrite:rewrite重写的关键字不可省略
regex:这里写的是正则表达式
replacement:这里是从新内容
flag:这里是最后的flag标记
flag标记说明:
flag标记 | 说明 |
---|---|
last | 也就是apache里的(L)标记,表示完成rewrite,URL地址不会改变 |
break | 本条规则匹配成功后,会中止匹配,再也不匹配后面的规则,URL地址不会改变 |
redirect | 返回302临时重定向,浏览器地址会显示跳转后的URL地址 |
permanent | 返回301永久重定向,浏览器地址栏显示跳转后的URL地址,Nginx返回response状态码301 |
相关符号说明:
符号 | 说明 |
---|---|
* | 表明前面0或者多个字符 |
+ | 表明前面1或者多个字符 |
? | 表明前面0或1个字符 |
^ | 表明字符串的开始位置 |
$ | 表明字符串结束位置 |
$n | 表明字符串结束第n个参数 |
. | 通配符,表明任何字符 |
server{ listen 80; server_name www.jkyst.xyz jkyst.xyz abc.jkyst.xyz; if($host != 'www.jkyst.xyz'){ rewrite ^/(.*)$ http://www,jkyst.xyz/$1 permanent; } }
当访问 "abc.jkyst.xyz" 时会自动跳转到 "www.jkyst.xyz",这里出现 "if" 语句用于判断,判断结果为true则执行语句内部的 rewrite重写
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent; } }
当访问 "test" 目录下的文件或目录不存在时,则跳转到 "test1"下面的此文件或者目录,跳转后会将URL进行转换
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ index.html last; } }
表示当访问 "test" 目录下的文件或目录不存在时,则重定向到 "index.html"文件,跳转后URl不会进行转换
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.jkyst.xyz/test/$1$2$3 permanent; } }
目录切换,表示将原目录转换成其余目录,【0-9a-z】表示转换后目录名称
server{ ......其余配置 location ~.*\.(sh)${ return 405; } }
表示当访问 "*.sh"的文件就会返回405错误
server{ listen 80; server_name www.jkyst.xyz; if ( $http_user_agent ~* ("Android")|(iPhone)){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test/$1 permanent; } }
表示当匹配到浏览代理为Android和iPhone时进行重定向 "test"目录下的文件,改变访问的地址
server{ location ~//.ht { deny all; } }
参数 | 介绍 |
---|---|
-f | 判断文件是否存在 返回值true为存在 |
!-f | 判断文件是否存在 返回值false为不存在 |
-d | 判断目录是否存在 返回值true为存在 |
!-d | 判断目录是否存在 返回值true为不存在 |
-e | 判断文件或目录是否存在 返回值true为存在 |
!-e | 判断文件或目录是否存在 返回值true为不存在 |
-x | 判断文件是否可执行 返回值true为可执行 |
!-x | 判断文件是否可执行 返回值true为不可执行 |
举例说明:
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent; } }
判断文件或目录是否存在