说明

  • nginx 302 跳转配置可以基于 rewrite 和 return 模块实现
  • 302 不支持带 body 的跳转,请求方法支持 GET 请求,是否支持 POST 和请求工具有关
  • 推荐使用 return 的方式执行 302 的动作,开销小于 rewrite 模块,但 rewrite 模块可进行更细粒度的控制

环境准备

  • nginx location 匹配一个路由,当请求这个开头的路由时,返回 200
1
2
3
4
5
6
server {
	……
	location ~* ^/test0513 {
        return 200;
    }
}
  • nginx 日志中设置记录请求相关信息
1
log_format    accesslog '$time_iso8601 | $remote_addr | $status | $request | $request_body | $proxy_add_x_forwarded_for | $upstream_addr | $upstream_response_time | $request_time | $scheme://$host:$server_port | $request_completion ' ;
  • 测试请求
1
curl  https://blog.xiangy.cloud/test0513 -I -X GET
  • 关注日志
1
2023-05-13T15:28:46+08:00 | 120.39.192.189 | 200 | GET /test0513 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK

常规 302 跳转测试

return

  • 配置 return 302 规则
1
2
3
4
5
6
server {
	……
    location ~* ^/return_test0513 {
        return 302 https://blog.xiangy.cloud/test0513;
    }
}
  • 发送请求
1
curl  https://blog.xiangy.cloud/return_test0513 -I   -L
  • 关注日志
1
2
2023-05-13T15:40:06+08:00 | 120.39.192.198 | 302 | GET /return_test0513 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK
2023-05-13T15:40:06+08:00 | 120.39.192.189 | 200 | GET /test0513 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK

rewrite

  • 配置 rewrite 规则
1
2
3
4
5
6
server {
	……
    location ~* ^/rewrite_test0513 {
        rewrite ^/rewrite_test0513(.*)$ https://blog.xiangy.cloud/test0513 redirect;
    }
}
  • 测试请求
1
curl  https://blog.xiangy.cloud/rewrite_test0513 -L  -X POST
  • 关注日志
1
2
2023-05-13T15:56:07+08:00 | 120.39.192.176 | 302 | POST /rewrite_test0513 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK
2023-05-13T15:56:07+08:00 | 120.39.192.193 | 200 | POST /test0513 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK

带参数 302 跳转

return

  • 配置 return 302 规则
1
2
3
4
5
6
server {
	……
    location ~* ^/return_test0513 {
        return 302 https://blog.xiangy.cloud/test0513?$args;
    }
}
  • 测试请求
1
curl  "https://blog.xiangy.cloud/return_test0513?a=1&b=2"   -L -X POST
  • 观察日志
1
2
2023-05-13T16:16:01+08:00 | 61.147.73.151 | 302 | GET /return_test0513?a=1&b=2 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK
2023-05-13T16:16:01+08:00 | 61.147.73.167 | 200 | GET /test0513?a=1&b=2 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK

rewrite

  • 配置 rewrite 规则
1
2
3
4
5
6
server{
	……
    location ~* ^/rewrite_test0513 {
        rewrite ^/rewrite_test0513(.*)$ https://blog.xiangy.cloud/test0513$1 redirect;
    }
}
  • 测试请求
1
curl  "https://blog.xiangy.cloud/rewrite_test0513?a=1&b=2"   -L  -X GET
  • 观察日志
1
2
2023-05-13T16:22:36+08:00 | 120.39.192.154 | 302 | GET /rewrite_test0513?a=1&b=2 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK
2023-05-13T16:22:36+08:00 | 120.39.192.174 | 200 | GET /test0513?a=1&b=2 HTTP/1.1 | - | - | - | 0.000 | http://blog.xiangy.cloud:80 | OK