Rewrite相关
if
判断请求的uri 是否包含设定的字符内容是否满足条件,如果满足条件则执行,if是顺序判断,只要满足一个判断条件,剩下的if则不会执行,反之则继续执行。
例:
if ($request_uri ~* 'a1=\d{4}')
proxy_pass http://10.16.3.5:8080;
如果请求的uri中包含a1=\d{4} ,则跳转到
set
设置变量 满足条件后设置响应变量,http后面跟请求类型以及包含在类型中的名字,如: 李家屯:李四。可以在服务端查看请求的客户端是以什么 浏览器浏览的/var/log/nginx/access.log
if ( $http_host ~* "zh" ) {
# 如果请求的域名中有 zh host=域名
set $language zh;
# 设定变量 language=zh
}
if ( $http_host ~* "jp" ) {
# 如果请求的域名中有 jp
set $language jp;
# 设定变量 language=jp
rewirte ^(.*)$ http://url.oldxu.com/$language
return
根据if判断,如果满足则 直接跳转 到 自定义的 连接,或返还 自定义的相关文字信息。
#跳转网页
if ( $http_user_agent ~* "MSIE|firefox" ) {
return 302 https://www.xuliangwei.com;
#跳转文字信息
if ( $http_user_agent ~* "MSIE|firefox" ) {
return 200 "change something"
# 直接返还状态码
return 500
# 跳转地址
return 302 "www.baidu.com";
rewrite(重点)
主要用来重写URL或者跳转URL的指令。
break 终止匹配
last 终止当前location的匹配,匹配下一组location
redirect 临时跳转 302
permanent 永久跳转 301
实验案例(重点)
if 匹配,return跳转
-
设置维护页面
return ^(.*)$ /wh.html break; -
设置外部人员无法访问,但是内部可以访问。
1.放在server层是全局判断,放在location层是单独判断
set $ip 0;
if ($remote_addr ~ "10.0.0.1|10.0.08"){
set $ip 1;
}
设置ip变量等于0,然后交给if判断,如果 来访ip满足判断条件,则将变量改为1,执行余下的location。
if (set="0"){
rewirte ^(.*)$ /wh.html break;
如果判断等于 0 则跳转到 维护页面,location终结。
}
2.如果只需要公司的公网ip访问,那么需要把判断条件写单独的 location 的uri下面
- 当用户请求遇到异常,将异常状态,跳转到维护页面,@ :内部跳转。
error_page 404 403 502 = @tempdown;
location @tempdown {
locatio 是指定位置的意思
rewrite ^(.*)$ /wh.html break;
}