一、if指令
语法:if(condition){…}
上下文区块段:server、location
该指令用于检查condition条件是否符合,如果condition条件符合,则执行大括号内的语句。if指令不支持嵌套,不支持多个条件 && 和 || 处理。其中,condition中可以包含的判断标识如下:
变量名 如果变量值为空或者是以“0”开始的字符串,则条件为假
使用"="和"!="运算符比较变量和字符串
~ 用来区分大小写匹配
~* 用来不区分大小写匹配
-f和!-f 用来判断是否存在文件
-d和!-d 用来判断是否存在目录
-e和!-e 用来判断是否存在文件或目录或符号链接
-x和!-x 用来判断文件是否可执行
用法示例:
#示例1 #如果客户端是手机 则跳转到test.css3er.com if ($http_user_agent~*(mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) { rewrite ^(.*) http://test.css3er.com$1 permanent; } #示例2 if ($request_method = POST) { return 405; }
二、return指令
语法:return code [text]
return code URL;
return URL;
上下文区块段:server、location、if
该指令用于结束规则的执行并返回状态码给客户端。
状态码包括:
204(No Content)、400(Bad Request)、402(Payment Required)、403(Forbidden)
404(Not Found)、405(Method Not Allowed)、406(Not Acceptable)
408(Request Timeout)、410(Gone)、411(Length Required)
413(Request Entity Too Large)、416(Requested Range Not Satisfiable)
500(Internal Server Error)、501(Not Implemented)、502(Bad Gateway)
503(Service Unavailable)和504(Gateway Timeout)。
简单用法示例:如果访问的URL以.sh .bash 结尾,则返回状态码403
location ~ .*\.(sh|bash)?$ { return 403; }
注意:return指令一般用于对请求的客户端直接返回响应状态码。在该作用域内return后面的所有nginx配置都是无效的。 可以使用在server、location以及if配置中。 除了支持跟状态码,还可以跟字符串或者url链接,return指令谨慎使用,稍不注意就会导致nginx的配置没有生效等之类的错误。
return指令 直接返回状态码示例:
#示例1 server{ listen 80; server_name www.test.com; return 403; rewrite /(.*) /abc/$1; #该行配置不会被执行。 } #示例2 server { ..... if ($request_uri ~ "\.htpasswd|\.bak") { return 404; rewrite /(.*) /aaa.txt; #该行配置不会被执行。 } #如果下面还有其他配置,会被执行。 ..... }
return指令 返回字符串示例:
#示例3 server { listen 80; server_name www.test.com; return 200 "hello"; } #说明:如果要想返回字符串,必须要加上状态码,否则会报错。 #示例4,直接返回json数据 location ^~ /domain { default_type application/json ; return 200 '{"name":"zack","id":"1"}'; } #return后面也支持写一个变量 #示例5 location /test { return 200 "$host $request_uri"; }
return指令 返回URL示例:
#示例6 server{ listen 80; server_name www.css3er.com; return https://www.css3er.com/p/206.html; rewrite /(.*) /abc/$1; #该行配置不会被执行。 } #注意:return后面的url必须是以http://或者https://开头的。
return指令实战示例:
#背景:网站被黑了,凡是在百度点击到本网站的请求,全部都跳转到了一个赌博的网站。 #通过nginx解决: if ($http_referer ~ 'baidu.com') { return 200 "<html><script>window.location.href='//$host$request_uri';</script></html>"; } #如果写成: return http://$host$request_uri; #在浏览器中会提示“重定向的次数过多”,因为会被反复跳转。
三、set指令
语法:set variable value;
默认值:none
上下文区块段:server、location、if
说明:定义一个变量并赋值,值可以是文本,变量或者文本变量混合体。
以前总是觉得会把事情做错而不是考虑会把事情做好 -->斯宾塞·约翰逊【谁动了我的奶酪】
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论