day50 nginx 的跳转的return;break;set;方法
day50 nginx 的跳转的return;break;set;方法
1 实践return指令的用法
server{} ----> 定义整个虚拟的主机网站ip:port
location{} -----> ip:port/addr 例如: ip:port/xixix
location{} -----> ip:port/static/
请求A ----> server{location{}} ---> return 200 ;300 ;500;
具体的用法
[root@web-9 conf.d]# cat return.conf
server {
listen 22666;
server_name _;
root html;
# 精确匹配,客户端只访问了网页根目录
location = / {
echo "welcome to chaoge linux course.";
}
location /test-return {
# 客户端完全匹配
if ($http_user_agent = huawei){
return 200 "agent is $http_user_agent \n";
}
# 限制必须是GET方法
if ($request_method != GET){
return 405 "必须是GET方法!其他方法不允许\n";
}
# 如果是IE浏览器,就重定向
if ($http_user_agent ~* IE){
return 301 http://yuchaoit.cn/cai.jpg;
}
# 没有if条件匹配到
return 404 "sorry, nothing ....\n";
}
# 默认匹配,如果没有匹配到任意内容,跳转到首页 jd.com就是这个做法
location / {
return 301 http://yuchaoit.cn/cai.jpg;
}
location /ji {
return 500 "鸡你太美\n";
}
}
实践return的执行
精准的匹配location
[root@master-61 ~]#curl -I 10.0.0.8:22666/ji
HTTP/1.1 500 Internal Server Error
Server: nginx/1.19.0
Date: Wed, 25 May 2022 03:08:47 GMT
Content-Type: application/octet-stream
Content-Length: 13
Connection: keep-alive
[root@master-61 ~]#
[root@master-61 ~]#
[root@master-61 ~]#curl -I 10.0.0.8:22666/ji/xixixixixi
HTTP/1.1 500 Internal Server Error
Server: nginx/1.19.0
Date: Wed, 25 May 2022 03:09:05 GMT
Content-Type: application/octet-stream
Content-Length: 13
Connection: keep-alive
[root@master-61 ~]#curl 10.0.0.8:22666/ji/xixixixixi
鸡你太美
[root@master-61 ~]#curl 10.0.0.8:22666/ji/xixixixix/haHAHAH
鸡你太美
set 指令
用于在nginx中设置变量,然后可以在配置文件中调用该变量
# 测试用法如下
server {
listen 22777;
server_name _;
root html;
set $my_url http://yuchaoit.cn/data/cai.jpg;
location /test-set {
return 301 $my_url;
}
}
# 测试执行
访问10.0.0.8:22777/test-set/
break 指令
break 是专门用于终止,rewrite的其他的执行的
rewrite 这个url的重写的模块,支持一下的关键字
break;if;return;rewrite;set
这些关键字都可以在server{} location中定义
break的作用是 nginx的代码,执行break后就会停止后续的操作
结合rewrite实际的用法,来看看break的其他的用法
```
server {
listen 22888;
server_name _;
root html;
location / {
set $my_website yuchaoit.cn;
echo "welcome to my website:" $my_website;
break;
set $my_name yuchao;
echo "my name is" $my_name;
}
}
```