项目地址

https://github.com/tim-chow/ngx-lua-mock-server


基本思路


Redis数据源的数据结构

Mock data在Redis数据库中的组织方式是一个hash table。其中hash表名是host接上request_uri(request_uri包含path和query_string),key是请求方法,value则是要返回给客户端的“假数据”。下面是一个例子:
ngx-lua-mock-server.png


关于如何设置正向代理

http_proxy="http://timd.cn:8080" curl http://www.sina.cn/

或者

export http_proxy="http://timd.cn:8080"
curl http://www.sina.cn/

测试ngx-lua-mock-server

[root@iZ23dastruaZ ~]# http_proxy="http://127.0.0.1:8080" curl -i http://www.sina.com/a?p=q
HTTP/1.1 200 OK
Server: openresty/1.11.2.1
Date: Sun, 16 Oct 2016 15:52:15 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: close
Is-Mocked: 1

zhalang
[root@iZ23dastruaZ ~]# http_proxy="http://127.0.0.1:8080" curl -i http://www.sina.com/
HTTP/1.1 200 OK
Server: openresty/1.11.2.1
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Date: Sun, 16 Oct 2016 15:52:28 GMT
Cache-Control: max-age=300
ETag: "57969250-4fae"
Last-Modified: Mon, 25 Jul 2016 22:27:28 GMT
Set-Cookie: TS016d18b4=01d72e94acacea7b9558885e8a32312d6c04bac486aa03b9378a6ff774e0438c6470976034; Path=/
Expires: Sun, 16 Oct 2016 15:57:28 GMT
Accept-Ranges: bytes


第一个请求返回的是Mock data,当返回Mock data时,会增加一个Is-Mocked响应头;第二个请求因为在Redis中没有Mock data,所以被代理到了真正的服务上了。


优势: