摘要:本文介绍在开发或调试阶段,前端已经写好了,但是后端不想通过自己组装数据来调试接口,这时候就可以让前端请求直接路由到开发本地,完成开发环境的调试。
背景
为什么会出现这么奇怪的需求,就是后端比较偷懒,不想自己组装各种请求,想直接用现成的页面来来操作,所以有了这种配置方案。下文给出两种实现方案。
浏览器插件安装
强烈推荐插件
ModHeader
+tweak
ModHeader
可以修改
http
请求头
tweak
修改
http
响应数据,在后端接口报错的时候,可以mock
数据让流程走下去
访问流量图
Nginx
基于map + upstream
流量转发
常规方案,基于
http
请求的header
中带的参数gv
来决定使用哪个分组,如果不传或者找不到就是默认分组,传入zhangsan
就是backend2
对应的服务
default.conf
map $http_gv $backend {
default backend1;
zhangsan backend2;
}
upstream backend1 {
server 192.168.137.2:5021;
}
upstream backend2 {
server 192.168.137.2:5022;
}
server {
listen 8092;
location / {
proxy_pass http://$backend;
}
}
docker-compose.yml
这里的镜像可以使用市面上公用的
nginx
镜像
version: '3.1'
services:
nginx-lua-gv:
image: huzhihui/nginx:1.23.1-lua
container_name: nginx-lua-gv
networks:
- default
environment:
- TZ=Asia/Shanghai
ports:
- 8092:8092
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./logs:/var/log/nginx
networks:
default:
external:
name: huzhihui
Nginx
基于lua
脚本的流量转发方案
该方案需要提前编译带有
lua
脚本的nginx
,复杂一点,但是使用更加灵活,也是使用http
请求头gv
参数来控制
Docker
镜像
可以使用我封装的,完全采用官方指南封装
nginx.conf
需要注意的点是,引入了其他第三方模块
load_module
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;
load_module modules/ngx_stream_lua_module.so;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 8092;
location / {
set_by_lua_block $backend {
local gv = ngx.req.get_headers()["gv"]
local backend
if gv == "zhangsan" then
backend = "http://192.168.137.2:5022"
elseif gv == "lisi" then
backend = "http://192.168.137.2:5023"
else
backend = "http://192.168.137.2:5021"
end
return backend
}
proxy_pass $backend;
}
}
}
docker-compose.yml
version: '3.1'
services:
nginx-lua-gv:
image: huzhihui/nginx:1.23.1-lua
container_name: nginx-lua-gv
networks:
- default
environment:
- TZ=Asia/Shanghai
ports:
- 8092:8092
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./logs:/var/log/nginx
networks:
default:
external:
name: huzhihui
测试结果
- 不传请求头默认的环境
- 传入
zhangsan
请求头