一、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
说明:定义一个变量并赋值,值可以是文本,变量或者文本变量混合体。
以前总是觉得会把事情做错而不是考虑会把事情做好    -->斯宾塞·约翰逊【谁动了我的奶酪】
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
 
						

 
					 
					 
					
精彩评论