1、前言
项目中,通常会遇到一个中转服务需要往多个不同的系统推送同一份数据,传统做法是需要在Java代码侧中调用多个API接口进行发送。其实Nginx作为一个请求代理转发中间件必然具备类似的功能,常见就有mirror指令进行流的镜像复制。
2、接口流复制
2.1、方式一:使用mirror指令
注意:要使用nginx的mirror指令,需要nginx安装ngx_http_mirror_module模块。可以通过nginx -V命令查看。nginx 1.13.4及后续版本已经内置了ngx_http_mirror_module模块,之前的版本需要手动编译安装。
示例场景:
- 发送一个主请求,端口8080;
- nginx同时转发到8081服务和8082服务;
- 8081和8082各自access log都有访问记录,且状态正常。
开撸,我这里准备的nginx版本为1.20.1。
2.1.1、nginx配置
server { listen 8080; index index.php index.html; server_name localhost; location / { mirror /mirror; proxy_pass http://localhostServer; } location = /mirror { internal; proxy_pass http://mirrorServer$request_uri; } } upstream localhostServer { server localhost:8081; } upstream mirrorServer { server localhost:8082; } server { listen 8081; server_name localhost; access_log /var/log/nginx/8081-access.log; root html/local; } server { listen 8082; server_name localhost; access_log /var/log/nginx/8082-access.log; root html/mirror; }接着在nginx的html目录下,创建local目录和mirror目录,并创建文件test.html。test.html内容随便填写:
mkdir -p local mirror touch test.html echo "local.test---> test.html" >> test.html echo "mirror.test---> test.html" >> test.html2.1.2、配置说明
- 主请求:/ 会将请求转发到 localhostServer。
- 镜像请求:配置了 mirror 指令,将请求同时复制一份转发到 /mirror。/mirror 使用了 internal,防止客户端直接访问。
- 镜像服务:/mirror 会将请求转发到 mirrorServer。
2.1.3、测试结果
由于8081和8082服务都配置了access log,因此当我们访问http://localhost:8080时,预期的结果是访问请求能得到正常的回显,并且8081和8082服务的access log都有相应的访问日志。
8081-access.log:
8082-access.log:
这样就完成了nginx实现接口复制的功能。Nginx 实现接口复制的需求通常用于在接收到请求后,将请求数据转发到多个后端服务器(例如用于日志记录、监控或者负载分摊)。
2.1.4、注意事项
- 镜像请求是非阻塞的,Nginx 不会等待镜像请求的响应。
- 镜像功能仅支持 HTTP 请求,不支持 WebSocket 或其他非 HTTP 协议。
2.2、方式二:使用Lua
Nginx支持Lua脚本有2种方式:
- 手动编译nginx,加入ngx_http_lua_module模块;
- 安装openresty,使用该组件的Nginx;
OpenResty是一个基于Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
2.2.1、安装Openresty
下载最新版本的openresty,OpenResty - 下载。这里下载的是1.27.1.1版本。
这里下的是源码包,需要重新编译。
注:这里直接编译会使用QAT硬件加速,你需要手动安装QAT_Engine依赖。
这里直接禁用硬件加速,编译时排除qat:
./configure --without-http_qat_module # 安装 make sudo make install # 这里还需要安装resty.http模块 /usr/local/openresty/bin/opm get ledgetech/lua-resty-http安装完成后,启动openresty的nginx:
/usr/local/openresty/nginx/sbin/nginx2.2.2、nginx配置
server { listen 8090; location / { content_by_lua_block { local http = require "resty.http" local res = ngx.location.capture("/localServer") local httpc = http.new() httpc:set_timeout(2000) local ok, err = httpc:request_uri("http://127.0.0.1:8092/test.html", { method = ngx.var.request_method, body = ngx.var.request_body, headers = ngx.req.get_headers(), follow_redirects = true, }) if not ok then ngx.log(ngx.ERR, "Mirror request failed: ", err) end ngx.say(res.body) } } location /localServer { proxy_pass http://127.0.0.1:8091; } } server { listen 8091; server_name 127.0.0.1; access_log /usr/local/openresty/nginx/logs/8091-access.log; root html/local; } server { listen 8092; server_name 127.0.0.1; access_log /usr/local/openresty/nginx/logs/8092-access.log; root html/mirror; }2.2.3、配置说明
- 主请求:/ 会先处理主服务的请求,通过 ngx.location.capture 调用 /localServer。
- 镜像请求:使用 Lua 的 resty.http 库,手动发起 HTTP 请求将数据复制到镜像服务器。
- 返回响应:将主请求的结果返回给客户端。
2.2.4、测试结果
直接访问请求:curl http://localhost:8090/test.html
8901-access.log:
8902-access.log:
3、小结
- 实时请求复制:推荐使用 ngx_http_mirror_module,简单易用。
- 高级控制:如果需要复杂逻辑,使用 ngx_http_lua_module 配合 Lua 脚本。
- 离线分析:通过日志记录请求数据,然后离线处理。
m.0e4c4.pro/Blog/400064.shtm
m.0e4c4.pro/Blog/282622.shtm
m.0e4c4.pro/Blog/248006.shtm
m.0e4c4.pro/Blog/006008.shtm
m.0e4c4.pro/Blog/686808.shtm
m.0e4c4.pro/Blog/406268.shtm
m.0e4c4.pro/Blog/717777.shtm
m.0e4c4.pro/Blog/662466.shtm
m.0e4c4.pro/Blog/622848.shtm
m.0e4c4.pro/Blog/806000.shtm
m.0e4c4.pro/Blog/628280.shtm
m.0e4c4.pro/Blog/068848.shtm
m.0e4c4.pro/Blog/000280.shtm
m.0e4c4.pro/Blog/822444.shtm
m.0e4c4.pro/Blog/086624.shtm
m.0e4c4.pro/Blog/066626.shtm
m.0e4c4.pro/Blog/862082.shtm
m.0e4c4.pro/Blog/066664.shtm
m.0e4c4.pro/Blog/000688.shtm
m.0e4c4.pro/Blog/286008.shtm
m.0e4c4.pro/Blog/600688.shtm
m.0e4c4.pro/Blog/602660.shtm
m.0e4c4.pro/Blog/680828.shtm
m.0e4c4.pro/Blog/806640.shtm
m.0e4c4.pro/Blog/628888.shtm
m.0e4c4.pro/Blog/624668.shtm
m.0e4c4.pro/Blog/119791.shtm
m.0e4c4.pro/Blog/919151.shtm
m.0e4c4.pro/Blog/004640.shtm
m.0e4c4.pro/Blog/268402.shtm
m.0e4c4.pro/Blog/513919.shtm
m.0e4c4.pro/Blog/602860.shtm
m.0e4c4.pro/Blog/066280.shtm
m.0e4c4.pro/Blog/242048.shtm
m.0e4c4.pro/Blog/264028.shtm
m.0e4c4.pro/Blog/046486.shtm
m.0e4c4.pro/Blog/400600.shtm
m.0e4c4.pro/Blog/646008.shtm
m.0e4c4.pro/Blog/197913.shtm
m.0e4c4.pro/Blog/884486.shtm
m.0e4c4.pro/Blog/006688.shtm
m.0e4c4.pro/Blog/806028.shtm
m.0e4c4.pro/Blog/484848.shtm
m.0e4c4.pro/Blog/797533.shtm
m.0e4c4.pro/Blog/068268.shtm
m.0e4c4.pro/Blog/644828.shtm
m.0e4c4.pro/Blog/286264.shtm
m.0e4c4.pro/Blog/822200.shtm
m.0e4c4.pro/Blog/644402.shtm
m.0e4c4.pro/Blog/731731.shtm
m.0e4c4.pro/Blog/759137.shtm
m.0e4c4.pro/Blog/088660.shtm
m.0e4c4.pro/Blog/404242.shtm
m.0e4c4.pro/Blog/731953.shtm
m.0e4c4.pro/Blog/999997.shtm
m.0e4c4.pro/Blog/628202.shtm
m.0e4c4.pro/Blog/286808.shtm
m.0e4c4.pro/Blog/135997.shtm
m.0e4c4.pro/Blog/000644.shtm
m.0e4c4.pro/Blog/820288.shtm
m.0e4c4.pro/Blog/240668.shtm
m.0e4c4.pro/Blog/280444.shtm
m.0e4c4.pro/Blog/880264.shtm
m.0e4c4.pro/Blog/480682.shtm
m.0e4c4.pro/Blog/008422.shtm
m.0e4c4.pro/Blog/888284.shtm
m.0e4c4.pro/Blog/840686.shtm
m.0e4c4.pro/Blog/468244.shtm
m.0e4c4.pro/Blog/480682.shtm
m.0e4c4.pro/Blog/266488.shtm
m.0e4c4.pro/Blog/086246.shtm
m.0e4c4.pro/Blog/260602.shtm
m.0e4c4.pro/Blog/444404.shtm
m.0e4c4.pro/Blog/482600.shtm
m.0e4c4.pro/Blog/462820.shtm
m.0e4c4.pro/Blog/622688.shtm
m.0e4c4.pro/Blog/620888.shtm
m.0e4c4.pro/Blog/464026.shtm
m.0e4c4.pro/Blog/888688.shtm
m.0e4c4.pro/Blog/224686.shtm
m.0e4c4.pro/Blog/448200.shtm
m.0e4c4.pro/Blog/062482.shtm
m.0e4c4.pro/Blog/517117.shtm
m.0e4c4.pro/Blog/806288.shtm
m.0e4c4.pro/Blog/884086.shtm
m.0e4c4.pro/Blog/884484.shtm
m.0e4c4.pro/Blog/484422.shtm
m.0e4c4.pro/Blog/066864.shtm
m.0e4c4.pro/Blog/080448.shtm
m.0e4c4.pro/Blog/555953.shtm
m.0e4c4.pro/Blog/848666.shtm
m.0e4c4.pro/Blog/826408.shtm
m.0e4c4.pro/Blog/664066.shtm
m.0e4c4.pro/Blog/822844.shtm
m.0e4c4.pro/Blog/402408.shtm
m.0e4c4.pro/Blog/666446.shtm
m.0e4c4.pro/Blog/486602.shtm
m.0e4c4.pro/Blog/751553.shtm
m.0e4c4.pro/Blog/280206.shtm
m.0e4c4.pro/Blog/804868.shtm
m.0e4c4.pro/Blog/802240.shtm
m.0e4c4.pro/Blog/626646.shtm
m.0e4c4.pro/Blog/448446.shtm
m.0e4c4.pro/Blog/177131.shtm
m.0e4c4.pro/Blog/662602.shtm
m.0e4c4.pro/Blog/804266.shtm
m.0e4c4.pro/Blog/660282.shtm
m.0e4c4.pro/Blog/331773.shtm
m.0e4c4.pro/Blog/800660.shtm
m.0e4c4.pro/Blog/624042.shtm
m.0e4c4.pro/Blog/660402.shtm
m.0e4c4.pro/Blog/882406.shtm
m.0e4c4.pro/Blog/937557.shtm
m.0e4c4.pro/Blog/424604.shtm
m.0e4c4.pro/Blog/222082.shtm
m.0e4c4.pro/Blog/262068.shtm
m.0e4c4.pro/Blog/222088.shtm
m.0e4c4.pro/Blog/953155.shtm
m.0e4c4.pro/Blog/446080.shtm
m.0e4c4.pro/Blog/646888.shtm
m.0e4c4.pro/Blog/828048.shtm
m.0e4c4.pro/Blog/515955.shtm
m.0e4c4.pro/Blog/197355.shtm
m.0e4c4.pro/Blog/202808.shtm
m.0e4c4.pro/Blog/680068.shtm
m.0e4c4.pro/Blog/131171.shtm
m.0e4c4.pro/Blog/480682.shtm
m.0e4c4.pro/Blog/995937.shtm
m.0e4c4.pro/Blog/660420.shtm
m.0e4c4.pro/Blog/395975.shtm
m.0e4c4.pro/Blog/644404.shtm
m.0e4c4.pro/Blog/620484.shtm
m.0e4c4.pro/Blog/424084.shtm
m.0e4c4.pro/Blog/226080.shtm
m.0e4c4.pro/Blog/420602.shtm
m.0e4c4.pro/Blog/426424.shtm
m.0e4c4.pro/Blog/888628.shtm
m.0e4c4.pro/Blog/244844.shtm
m.0e4c4.pro/Blog/822262.shtm
m.0e4c4.pro/Blog/666686.shtm
m.0e4c4.pro/Blog/622246.shtm
m.0e4c4.pro/Blog/197797.shtm
m.0e4c4.pro/Blog/688482.shtm
m.0e4c4.pro/Blog/208084.shtm
m.0e4c4.pro/Blog/202024.shtm
m.0e4c4.pro/Blog/002000.shtm
m.0e4c4.pro/Blog/620260.shtm
m.0e4c4.pro/Blog/222242.shtm
m.0e4c4.pro/Blog/628688.shtm
m.0e4c4.pro/Blog/157937.shtm
m.0e4c4.pro/Blog/646802.shtm
m.0e4c4.pro/Blog/206604.shtm
m.0e4c4.pro/Blog/060020.shtm
m.0e4c4.pro/Blog/262066.shtm
m.0e4c4.pro/Blog/000808.shtm
m.0e4c4.pro/Blog/604266.shtm
m.0e4c4.pro/Blog/957353.shtm
m.0e4c4.pro/Blog/155751.shtm
m.0e4c4.pro/Blog/937157.shtm
m.0e4c4.pro/Blog/797317.shtm
m.0e4c4.pro/Blog/539159.shtm
m.0e4c4.pro/Blog/246080.shtm
m.0e4c4.pro/Blog/733319.shtm
m.0e4c4.pro/Blog/317517.shtm
m.0e4c4.pro/Blog/088206.shtm
m.0e4c4.pro/Blog/515999.shtm
m.0e4c4.pro/Blog/913731.shtm
m.0e4c4.pro/Blog/513357.shtm
m.0e4c4.pro/Blog/735971.shtm
m.0e4c4.pro/Blog/357937.shtm
m.0e4c4.pro/Blog/999553.shtm
m.0e4c4.pro/Blog/911757.shtm
m.0e4c4.pro/Blog/826468.shtm
m.0e4c4.pro/Blog/313597.shtm
m.0e4c4.pro/Blog/040802.shtm
m.0e4c4.pro/Blog/064802.shtm
m.0e4c4.pro/Blog/682400.shtm
m.0e4c4.pro/Blog/773137.shtm
m.0e4c4.pro/Blog/886408.shtm
m.0e4c4.pro/Blog/006868.shtm
m.0e4c4.pro/Blog/917713.shtm
m.0e4c4.pro/Blog/062820.shtm
m.0e4c4.pro/Blog/244862.shtm
m.0e4c4.pro/Blog/599375.shtm
m.0e4c4.pro/Blog/711933.shtm
m.0e4c4.pro/Blog/171597.shtm
m.0e4c4.pro/Blog/686446.shtm
m.0e4c4.pro/Blog/226048.shtm
m.0e4c4.pro/Blog/200260.shtm
m.0e4c4.pro/Blog/193937.shtm
m.0e4c4.pro/Blog/975373.shtm
m.0e4c4.pro/Blog/119551.shtm
m.0e4c4.pro/Blog/999171.shtm
m.0e4c4.pro/Blog/711979.shtm
m.0e4c4.pro/Blog/957739.shtm
m.0e4c4.pro/Blog/175397.shtm
m.0e4c4.pro/Blog/773335.shtm
m.0e4c4.pro/Blog/737553.shtm
m.0e4c4.pro/Blog/911531.shtm
m.0e4c4.pro/Blog/464422.shtm
m.0e4c4.pro/Blog/179197.shtm
m.0e4c4.pro/Blog/137171.shtm
m.0e4c4.pro/Blog/686080.shtm
m.0e4c4.pro/Blog/802464.shtm
m.0e4c4.pro/Blog/175357.shtm
m.0e4c4.pro/Blog/153777.shtm
m.0e4c4.pro/Blog/557199.shtm
m.0e4c4.pro/Blog/060080.shtm
m.0e4c4.pro/Blog/175955.shtm
m.0e4c4.pro/Blog/408024.shtm
m.0e4c4.pro/Blog/042068.shtm
m.0e4c4.pro/Blog/026408.shtm
m.0e4c4.pro/Blog/246826.shtm
m.0e4c4.pro/Blog/422048.shtm
m.0e4c4.pro/Blog/157537.shtm
m.0e4c4.pro/Blog/577153.shtm
m.0e4c4.pro/Blog/913759.shtm
m.0e4c4.pro/Blog/242002.shtm
m.0e4c4.pro/Blog/911311.shtm
m.0e4c4.pro/Blog/333973.shtm
m.0e4c4.pro/Blog/822682.shtm
m.0e4c4.pro/Blog/480682.shtm
m.0e4c4.pro/Blog/115995.shtm
m.0e4c4.pro/Blog/519597.shtm
m.0e4c4.pro/Blog/733151.shtm
m.0e4c4.pro/Blog/379559.shtm
m.0e4c4.pro/Blog/062484.shtm
m.0e4c4.pro/Blog/808044.shtm
m.0e4c4.pro/Blog/131111.shtm
m.0e4c4.pro/Blog/808844.shtm
m.0e4c4.pro/Blog/397393.shtm
m.0e4c4.pro/Blog/995595.shtm
m.0e4c4.pro/Blog/313995.shtm
m.0e4c4.pro/Blog/777393.shtm
m.0e4c4.pro/Blog/939735.shtm
m.0e4c4.pro/Blog/151757.shtm
m.0e4c4.pro/Blog/997191.shtm
m.0e4c4.pro/Blog/393797.shtm
m.0e4c4.pro/Blog/519177.shtm
m.0e4c4.pro/Blog/711971.shtm
m.0e4c4.pro/Blog/735999.shtm
m.0e4c4.pro/Blog/773717.shtm
m.0e4c4.pro/Blog/935399.shtm
m.0e4c4.pro/Blog/973931.shtm
m.0e4c4.pro/Blog/719775.shtm
m.0e4c4.pro/Blog/715335.shtm
m.0e4c4.pro/Blog/951133.shtm
m.0e4c4.pro/Blog/993771.shtm
m.0e4c4.pro/Blog/953337.shtm
m.0e4c4.pro/Blog/593151.shtm
m.0e4c4.pro/Blog/131779.shtm
m.0e4c4.pro/Blog/199779.shtm
m.0e4c4.pro/Blog/153959.shtm
m.0e4c4.pro/Blog/559313.shtm
m.0e4c4.pro/Blog/719731.shtm
m.0e4c4.pro/Blog/551135.shtm
m.0e4c4.pro/Blog/357131.shtm
m.0e4c4.pro/Blog/935579.shtm
m.0e4c4.pro/Blog/135717.shtm
m.0e4c4.pro/Blog/999791.shtm
m.0e4c4.pro/Blog/771571.shtm
m.0e4c4.pro/Blog/135339.shtm
m.0e4c4.pro/Blog/911179.shtm
m.0e4c4.pro/Blog/593517.shtm
m.0e4c4.pro/Blog/117511.shtm
m.0e4c4.pro/Blog/139151.shtm
m.0e4c4.pro/Blog/173353.shtm
m.0e4c4.pro/Blog/911771.shtm
m.0e4c4.pro/Blog/971197.shtm
m.0e4c4.pro/Blog/593311.shtm
m.0e4c4.pro/Blog/195313.shtm
m.0e4c4.pro/Blog/979317.shtm
m.0e4c4.pro/Blog/597193.shtm
m.0e4c4.pro/Blog/137757.shtm
m.0e4c4.pro/Blog/139933.shtm
m.0e4c4.pro/Blog/193351.shtm
m.0e4c4.pro/Blog/591337.shtm
m.0e4c4.pro/Blog/953557.shtm
m.0e4c4.pro/Blog/911979.shtm
m.0e4c4.pro/Blog/311993.shtm
m.0e4c4.pro/Blog/355937.shtm
m.0e4c4.pro/Blog/759711.shtm
m.0e4c4.pro/Blog/151393.shtm
m.0e4c4.pro/Blog/737371.shtm
m.0e4c4.pro/Blog/931913.shtm
m.0e4c4.pro/Blog/157173.shtm
m.0e4c4.pro/Blog/751555.shtm
m.0e4c4.pro/Blog/973553.shtm
m.0e4c4.pro/Blog/975171.shtm
m.0e4c4.pro/Blog/591397.shtm
m.0e4c4.pro/Blog/915371.shtm
m.0e4c4.pro/Blog/375135.shtm
m.0e4c4.pro/Blog/173199.shtm
m.0e4c4.pro/Blog/331359.shtm
m.0e4c4.pro/Blog/175131.shtm
m.0e4c4.pro/Blog/799795.shtm
m.0e4c4.pro/Blog/397533.shtm
m.0e4c4.pro/Blog/579379.shtm
m.0e4c4.pro/Blog/979351.shtm
m.0e4c4.pro/Blog/335991.shtm
m.0e4c4.pro/Blog/351591.shtm
m.0e4c4.pro/Blog/337773.shtm
m.0e4c4.pro/Blog/371513.shtm
m.0e4c4.pro/Blog/193513.shtm
m.0e4c4.pro/Blog/553951.shtm
m.0e4c4.pro/Blog/335517.shtm
m.0e4c4.pro/Blog/331153.shtm
m.0e4c4.pro/Blog/773777.shtm
m.0e4c4.pro/Blog/733111.shtm
m.0e4c4.pro/Blog/339117.shtm
m.0e4c4.pro/Blog/991533.shtm
m.0e4c4.pro/Blog/599375.shtm
m.0e4c4.pro/Blog/571735.shtm
m.0e4c4.pro/Blog/199193.shtm
m.0e4c4.pro/Blog/911971.shtm
m.0e4c4.pro/Blog/337911.shtm
m.0e4c4.pro/Blog/139371.shtm
m.0e4c4.pro/Blog/935175.shtm
m.0e4c4.pro/Blog/139317.shtm
m.0e4c4.pro/Blog/264000.shtm
m.0e4c4.pro/Blog/460688.shtm
m.0e4c4.pro/Blog/339939.shtm
m.0e4c4.pro/Blog/131151.shtm
m.0e4c4.pro/Blog/088686.shtm
m.0e4c4.pro/Blog/513159.shtm
m.0e4c4.pro/Blog/311793.shtm
m.0e4c4.pro/Blog/595731.shtm
m.0e4c4.pro/Blog/751137.shtm
m.0e4c4.pro/Blog/737715.shtm
m.0e4c4.pro/Blog/195931.shtm
m.0e4c4.pro/Blog/488446.shtm
m.0e4c4.pro/Blog/959391.shtm
m.0e4c4.pro/Blog/531373.shtm
m.0e4c4.pro/Blog/315935.shtm
m.0e4c4.pro/Blog/393357.shtm
m.0e4c4.pro/Blog/935199.shtm
m.0e4c4.pro/Blog/911539.shtm
m.0e4c4.pro/Blog/779331.shtm
m.0e4c4.pro/Blog/335911.shtm
m.0e4c4.pro/Blog/155373.shtm
m.0e4c4.pro/Blog/539531.shtm
m.0e4c4.pro/Blog/951997.shtm
m.0e4c4.pro/Blog/199597.shtm
m.0e4c4.pro/Blog/311995.shtm
m.0e4c4.pro/Blog/135359.shtm
m.0e4c4.pro/Blog/519119.shtm
m.0e4c4.pro/Blog/577951.shtm
m.0e4c4.pro/Blog/191771.shtm
m.0e4c4.pro/Blog/773117.shtm
m.0e4c4.pro/Blog/959799.shtm
m.0e4c4.pro/Blog/119133.shtm
m.0e4c4.pro/Blog/953199.shtm
m.0e4c4.pro/Blog/515115.shtm
m.0e4c4.pro/Blog/397351.shtm
m.0e4c4.pro/Blog/717353.shtm
m.0e4c4.pro/Blog/731775.shtm
m.0e4c4.pro/Blog/377155.shtm
m.0e4c4.pro/Blog/351717.shtm
m.0e4c4.pro/Blog/731137.shtm
m.0e4c4.pro/Blog/771533.shtm
m.0e4c4.pro/Blog/313951.shtm
m.0e4c4.pro/Blog/377357.shtm
m.0e4c4.pro/Blog/953151.shtm
m.0e4c4.pro/Blog/175357.shtm
m.0e4c4.pro/Blog/539993.shtm
m.0e4c4.pro/Blog/377795.shtm
m.0e4c4.pro/Blog/753731.shtm
m.0e4c4.pro/Blog/995931.shtm
m.0e4c4.pro/Blog/575777.shtm
m.0e4c4.pro/Blog/373937.shtm
m.0e4c4.pro/Blog/731193.shtm
m.0e4c4.pro/Blog/537739.shtm
m.0e4c4.pro/Blog/957571.shtm
m.0e4c4.pro/Blog/977939.shtm
m.0e4c4.pro/Blog/595113.shtm
m.0e4c4.pro/Blog/397353.shtm
m.0e4c4.pro/Blog/575119.shtm
m.0e4c4.pro/Blog/775973.shtm
m.0e4c4.pro/Blog/113173.shtm
m.0e4c4.pro/Blog/311359.shtm
m.0e4c4.pro/Blog/359379.shtm
m.0e4c4.pro/Blog/375593.shtm
m.0e4c4.pro/Blog/319171.shtm
m.0e4c4.pro/Blog/779951.shtm
m.0e4c4.pro/Blog/593717.shtm
m.0e4c4.pro/Blog/137133.shtm
m.0e4c4.pro/Blog/957779.shtm
m.0e4c4.pro/Blog/759751.shtm
m.0e4c4.pro/Blog/911173.shtm
m.0e4c4.pro/Blog/539931.shtm
m.k4yes.pro/Blog/553357.shtm
m.k4yes.pro/Blog/311399.shtm
m.k4yes.pro/Blog/351779.shtm
m.k4yes.pro/Blog/579731.shtm
m.k4yes.pro/Blog/373717.shtm
m.k4yes.pro/Blog/371797.shtm
m.k4yes.pro/Blog/959959.shtm
m.k4yes.pro/Blog/711955.shtm
m.k4yes.pro/Blog/991573.shtm
m.k4yes.pro/Blog/935735.shtm
m.k4yes.pro/Blog/377915.shtm
m.k4yes.pro/Blog/193355.shtm
m.k4yes.pro/Blog/995111.shtm
m.k4yes.pro/Blog/755313.shtm
m.k4yes.pro/Blog/159393.shtm
m.k4yes.pro/Blog/397711.shtm
m.k4yes.pro/Blog/533953.shtm
m.k4yes.pro/Blog/775779.shtm
m.k4yes.pro/Blog/939171.shtm
m.k4yes.pro/Blog/357333.shtm
m.k4yes.pro/Blog/771757.shtm
m.k4yes.pro/Blog/577593.shtm
m.k4yes.pro/Blog/377553.shtm
m.k4yes.pro/Blog/715315.shtm
m.k4yes.pro/Blog/593713.shtm
m.k4yes.pro/Blog/531531.shtm
m.k4yes.pro/Blog/937575.shtm
m.k4yes.pro/Blog/311319.shtm
m.k4yes.pro/Blog/593737.shtm
m.k4yes.pro/Blog/135113.shtm
m.k4yes.pro/Blog/395393.shtm
m.k4yes.pro/Blog/519359.shtm
m.k4yes.pro/Blog/751775.shtm
m.k4yes.pro/Blog/197991.shtm
m.k4yes.pro/Blog/513337.shtm
m.k4yes.pro/Blog/337335.shtm
m.k4yes.pro/Blog/173731.shtm
m.k4yes.pro/Blog/717377.shtm
m.k4yes.pro/Blog/119991.shtm
m.k4yes.pro/Blog/117991.shtm
m.k4yes.pro/Blog/719535.shtm
m.k4yes.pro/Blog/131711.shtm
m.k4yes.pro/Blog/193515.shtm
m.k4yes.pro/Blog/119337.shtm
m.k4yes.pro/Blog/359751.shtm
m.k4yes.pro/Blog/591795.shtm
m.k4yes.pro/Blog/117519.shtm
m.k4yes.pro/Blog/171953.shtm
m.k4yes.pro/Blog/573997.shtm
m.k4yes.pro/Blog/199751.shtm
m.k4yes.pro/Blog/197335.shtm
m.k4yes.pro/Blog/591779.shtm
m.k4yes.pro/Blog/797933.shtm
m.k4yes.pro/Blog/177115.shtm
m.k4yes.pro/Blog/591539.shtm
m.k4yes.pro/Blog/597711.shtm
m.k4yes.pro/Blog/117553.shtm
m.k4yes.pro/Blog/753739.shtm
m.k4yes.pro/Blog/797979.shtm
m.k4yes.pro/Blog/553739.shtm
m.k4yes.pro/Blog/195333.shtm
m.k4yes.pro/Blog/935179.shtm
m.k4yes.pro/Blog/791157.shtm
m.k4yes.pro/Blog/135111.shtm
m.k4yes.pro/Blog/197799.shtm
m.k4yes.pro/Blog/791337.shtm
m.k4yes.pro/Blog/197359.shtm
m.k4yes.pro/Blog/111551.shtm
m.k4yes.pro/Blog/595571.shtm
m.k4yes.pro/Blog/577979.shtm
m.k4yes.pro/Blog/713119.shtm
m.k4yes.pro/Blog/197559.shtm
m.k4yes.pro/Blog/733739.shtm
m.k4yes.pro/Blog/133315.shtm
m.k4yes.pro/Blog/337979.shtm
m.k4yes.pro/Blog/175355.shtm
m.k4yes.pro/Blog/193711.shtm
m.k4yes.pro/Blog/773159.shtm
m.k4yes.pro/Blog/553993.shtm
m.k4yes.pro/Blog/533355.shtm
m.k4yes.pro/Blog/573935.shtm
m.k4yes.pro/Blog/515157.shtm
m.k4yes.pro/Blog/931997.shtm
m.k4yes.pro/Blog/173357.shtm
m.k4yes.pro/Blog/593937.shtm
m.k4yes.pro/Blog/137793.shtm
m.k4yes.pro/Blog/353991.shtm
m.k4yes.pro/Blog/773915.shtm
m.k4yes.pro/Blog/751553.shtm
m.k4yes.pro/Blog/135335.shtm
m.k4yes.pro/Blog/375159.shtm
m.k4yes.pro/Blog/953331.shtm
m.k4yes.pro/Blog/755139.shtm
m.k4yes.pro/Blog/793153.shtm
m.k4yes.pro/Blog/717133.shtm
m.k4yes.pro/Blog/315971.shtm
m.k4yes.pro/Blog/515939.shtm
m.k4yes.pro/Blog/553139.shtm
m.k4yes.pro/Blog/155915.shtm
m.k4yes.pro/Blog/175533.shtm
m.k4yes.pro/Blog/391533.shtm
m.k4yes.pro/Blog/199539.shtm
m.k4yes.pro/Blog/135113.shtm
m.k4yes.pro/Blog/391199.shtm
m.k4yes.pro/Blog/775973.shtm
m.k4yes.pro/Blog/779399.shtm
m.k4yes.pro/Blog/775957.shtm
m.k4yes.pro/Blog/177511.shtm
m.k4yes.pro/Blog/551533.shtm
m.k4yes.pro/Blog/553513.shtm
m.k4yes.pro/Blog/535311.shtm
m.k4yes.pro/Blog/793359.shtm
m.k4yes.pro/Blog/393511.shtm
m.k4yes.pro/Blog/579917.shtm
m.k4yes.pro/Blog/937131.shtm
m.k4yes.pro/Blog/777593.shtm
m.k4yes.pro/Blog/155953.shtm
m.k4yes.pro/Blog/931711.shtm
m.k4yes.pro/Blog/759337.shtm
m.k4yes.pro/Blog/733379.shtm
m.k4yes.pro/Blog/951379.shtm
m.k4yes.pro/Blog/191577.shtm
m.k4yes.pro/Blog/359751.shtm
m.k4yes.pro/Blog/355799.shtm
m.k4yes.pro/Blog/597335.shtm
m.k4yes.pro/Blog/931911.shtm
m.k4yes.pro/Blog/357511.shtm
m.k4yes.pro/Blog/111519.shtm
m.k4yes.pro/Blog/719933.shtm
m.k4yes.pro/Blog/759595.shtm
m.k4yes.pro/Blog/373333.shtm
m.k4yes.pro/Blog/571933.shtm
m.k4yes.pro/Blog/973517.shtm
m.k4yes.pro/Blog/759579.shtm
m.k4yes.pro/Blog/193191.shtm
m.k4yes.pro/Blog/519157.shtm
m.k4yes.pro/Blog/933175.shtm
m.k4yes.pro/Blog/911377.shtm
m.k4yes.pro/Blog/195159.shtm
m.k4yes.pro/Blog/579331.shtm
m.k4yes.pro/Blog/717991.shtm
m.k4yes.pro/Blog/177913.shtm
m.k4yes.pro/Blog/313931.shtm
m.k4yes.pro/Blog/933133.shtm
m.k4yes.pro/Blog/197159.shtm
m.k4yes.pro/Blog/933775.shtm
m.k4yes.pro/Blog/973197.shtm
m.k4yes.pro/Blog/133515.shtm
m.k4yes.pro/Blog/139331.shtm
m.k4yes.pro/Blog/357135.shtm
m.k4yes.pro/Blog/133737.shtm
m.k4yes.pro/Blog/177193.shtm
m.k4yes.pro/Blog/395133.shtm
m.k4yes.pro/Blog/955535.shtm
m.k4yes.pro/Blog/131979.shtm
m.k4yes.pro/Blog/519519.shtm
m.k4yes.pro/Blog/311731.shtm
m.k4yes.pro/Blog/793337.shtm
m.k4yes.pro/Blog/533713.shtm
m.k4yes.pro/Blog/373375.shtm
m.k4yes.pro/Blog/757757.shtm
m.k4yes.pro/Blog/797771.shtm
m.k4yes.pro/Blog/335571.shtm
m.k4yes.pro/Blog/333971.shtm
m.k4yes.pro/Blog/797593.shtm
m.k4yes.pro/Blog/799539.shtm
m.k4yes.pro/Blog/195379.shtm
m.k4yes.pro/Blog/599375.shtm
m.k4yes.pro/Blog/535175.shtm
m.k4yes.pro/Blog/795371.shtm
m.k4yes.pro/Blog/355959.shtm
m.k4yes.pro/Blog/595531.shtm
m.k4yes.pro/Blog/537311.shtm
m.k4yes.pro/Blog/957971.shtm
m.k4yes.pro/Blog/533799.shtm
m.k4yes.pro/Blog/915773.shtm
m.k4yes.pro/Blog/179999.shtm
m.k4yes.pro/Blog/597933.shtm
m.k4yes.pro/Blog/393155.shtm
m.k4yes.pro/Blog/151711.shtm
m.k4yes.pro/Blog/331117.shtm
m.k4yes.pro/Blog/757739.shtm
m.k4yes.pro/Blog/555939.shtm
m.k4yes.pro/Blog/399573.shtm
m.k4yes.pro/Blog/715331.shtm
m.k4yes.pro/Blog/919719.shtm
m.k4yes.pro/Blog/151553.shtm
m.k4yes.pro/Blog/559959.shtm
m.k4yes.pro/Blog/997319.shtm
m.k4yes.pro/Blog/195533.shtm
m.k4yes.pro/Blog/351177.shtm
m.k4yes.pro/Blog/955155.shtm
m.k4yes.pro/Blog/711375.shtm
m.k4yes.pro/Blog/351773.shtm
m.k4yes.pro/Blog/131911.shtm
m.k4yes.pro/Blog/335995.shtm
m.k4yes.pro/Blog/517155.shtm
m.k4yes.pro/Blog/773715.shtm
m.k4yes.pro/Blog/731539.shtm
m.k4yes.pro/Blog/597579.shtm
m.k4yes.pro/Blog/191531.shtm
m.k4yes.pro/Blog/133111.shtm
m.k4yes.pro/Blog/911391.shtm
m.k4yes.pro/Blog/175515.shtm
m.k4yes.pro/Blog/319317.shtm
m.k4yes.pro/Blog/315157.shtm
m.k4yes.pro/Blog/975519.shtm
m.k4yes.pro/Blog/973917.shtm
m.k4yes.pro/Blog/795595.shtm
m.k4yes.pro/Blog/771171.shtm
m.k4yes.pro/Blog/377935.shtm
m.k4yes.pro/Blog/357375.shtm
m.k4yes.pro/Blog/551553.shtm
m.k4yes.pro/Blog/519137.shtm
m.k4yes.pro/Blog/911117.shtm
m.k4yes.pro/Blog/373975.shtm
m.k4yes.pro/Blog/191319.shtm
m.k4yes.pro/Blog/911371.shtm
m.k4yes.pro/Blog/593511.shtm
m.k4yes.pro/Blog/317353.shtm
m.k4yes.pro/Blog/735157.shtm
m.k4yes.pro/Blog/531111.shtm
m.k4yes.pro/Blog/375595.shtm
m.k4yes.pro/Blog/711511.shtm
m.k4yes.pro/Blog/939537.shtm
m.k4yes.pro/Blog/193711.shtm
m.k4yes.pro/Blog/113955.shtm
m.k4yes.pro/Blog/951955.shtm
m.k4yes.pro/Blog/157795.shtm
m.k4yes.pro/Blog/719113.shtm
m.k4yes.pro/Blog/357593.shtm
m.k4yes.pro/Blog/319197.shtm
m.k4yes.pro/Blog/997919.shtm
m.k4yes.pro/Blog/779919.shtm
m.k4yes.pro/Blog/779751.shtm
m.k4yes.pro/Blog/977171.shtm
m.k4yes.pro/Blog/199357.shtm
m.k4yes.pro/Blog/359551.shtm
m.k4yes.pro/Blog/753551.shtm
m.k4yes.pro/Blog/955993.shtm
m.k4yes.pro/Blog/175133.shtm
m.k4yes.pro/Blog/331795.shtm
m.k4yes.pro/Blog/533379.shtm
m.k4yes.pro/Blog/537579.shtm
m.k4yes.pro/Blog/715319.shtm
m.k4yes.pro/Blog/735953.shtm
m.k4yes.pro/Blog/397337.shtm
m.k4yes.pro/Blog/177155.shtm
m.k4yes.pro/Blog/135539.shtm
m.k4yes.pro/Blog/959113.shtm
m.k4yes.pro/Blog/797791.shtm
m.k4yes.pro/Blog/555793.shtm
m.k4yes.pro/Blog/577933.shtm
m.k4yes.pro/Blog/995919.shtm
m.k4yes.pro/Blog/511975.shtm
m.k4yes.pro/Blog/135955.shtm
m.k4yes.pro/Blog/397319.shtm
m.k4yes.pro/Blog/379157.shtm
m.k4yes.pro/Blog/571197.shtm
m.k4yes.pro/Blog/713173.shtm
m.k4yes.pro/Blog/393537.shtm
m.k4yes.pro/Blog/195115.shtm
m.k4yes.pro/Blog/173319.shtm
m.k4yes.pro/Blog/771371.shtm
m.k4yes.pro/Blog/939335.shtm
m.k4yes.pro/Blog/733797.shtm
m.k4yes.pro/Blog/571759.shtm
m.k4yes.pro/Blog/939193.shtm
m.k4yes.pro/Blog/795519.shtm
m.k4yes.pro/Blog/793577.shtm
m.k4yes.pro/Blog/913797.shtm
m.k4yes.pro/Blog/539139.shtm
m.k4yes.pro/Blog/797575.shtm
m.k4yes.pro/Blog/397733.shtm
m.k4yes.pro/Blog/713951.shtm
m.k4yes.pro/Blog/311597.shtm
m.k4yes.pro/Blog/773379.shtm
m.k4yes.pro/Blog/919357.shtm
m.k4yes.pro/Blog/797175.shtm
m.k4yes.pro/Blog/991533.shtm
m.k4yes.pro/Blog/151151.shtm
m.k4yes.pro/Blog/173355.shtm
m.k4yes.pro/Blog/519737.shtm
m.k4yes.pro/Blog/931515.shtm
m.k4yes.pro/Blog/377397.shtm
m.k4yes.pro/Blog/151911.shtm
m.k4yes.pro/Blog/731155.shtm
m.k4yes.pro/Blog/553197.shtm
m.k4yes.pro/Blog/151599.shtm
m.k4yes.pro/Blog/313533.shtm
m.k4yes.pro/Blog/755597.shtm
m.k4yes.pro/Blog/991997.shtm
m.k4yes.pro/Blog/775757.shtm
m.k4yes.pro/Blog/313939.shtm
m.k4yes.pro/Blog/153797.shtm
m.k4yes.pro/Blog/575135.shtm
m.k4yes.pro/Blog/793797.shtm
m.k4yes.pro/Blog/599711.shtm
m.k4yes.pro/Blog/517133.shtm
m.k4yes.pro/Blog/157317.shtm
m.k4yes.pro/Blog/597379.shtm
m.k4yes.pro/Blog/333171.shtm
m.k4yes.pro/Blog/793195.shtm
m.k4yes.pro/Blog/797757.shtm
m.k4yes.pro/Blog/193975.shtm
m.k4yes.pro/Blog/971339.shtm
m.k4yes.pro/Blog/993191.shtm
m.k4yes.pro/Blog/131793.shtm
m.k4yes.pro/Blog/355577.shtm
m.k4yes.pro/Blog/715991.shtm
m.k4yes.pro/Blog/579177.shtm
m.k4yes.pro/Blog/579939.shtm
m.k4yes.pro/Blog/399735.shtm
m.k4yes.pro/Blog/351175.shtm
m.k4yes.pro/Blog/131995.shtm
m.k4yes.pro/Blog/939113.shtm
m.k4yes.pro/Blog/755793.shtm
m.k4yes.pro/Blog/935119.shtm
m.k4yes.pro/Blog/937153.shtm
m.k4yes.pro/Blog/119713.shtm
m.k4yes.pro/Blog/737319.shtm
m.k4yes.pro/Blog/331393.shtm
m.k4yes.pro/Blog/775979.shtm
m.k4yes.pro/Blog/511557.shtm
m.k4yes.pro/Blog/573777.shtm
m.k4yes.pro/Blog/971311.shtm
m.k4yes.pro/Blog/751757.shtm
m.k4yes.pro/Blog/713717.shtm
m.k4yes.pro/Blog/337191.shtm
m.k4yes.pro/Blog/919995.shtm
m.k4yes.pro/Blog/537391.shtm
m.k4yes.pro/Blog/371191.shtm
m.k4yes.pro/Blog/977771.shtm
m.k4yes.pro/Blog/559713.shtm
m.k4yes.pro/Blog/319915.shtm
m.k4yes.pro/Blog/913319.shtm
m.k4yes.pro/Blog/719717.shtm
m.k4yes.pro/Blog/557779.shtm
m.k4yes.pro/Blog/111195.shtm
m.k4yes.pro/Blog/779559.shtm
m.k4yes.pro/Blog/513793.shtm
m.k4yes.pro/Blog/173575.shtm
m.k4yes.pro/Blog/957195.shtm
m.k4yes.pro/Blog/711975.shtm
m.k4yes.pro/Blog/959775.shtm
m.k4yes.pro/Blog/135319.shtm
m.k4yes.pro/Blog/153399.shtm
m.k4yes.pro/Blog/319595.shtm
m.k4yes.pro/Blog/915171.shtm
m.k4yes.pro/Blog/515399.shtm
m.k4yes.pro/Blog/335935.shtm
m.k4yes.pro/Blog/755999.shtm
m.k4yes.pro/Blog/173373.shtm
m.k4yes.pro/Blog/153739.shtm
m.k4yes.pro/Blog/579751.shtm
m.k4yes.pro/Blog/911313.shtm
m.k4yes.pro/Blog/397731.shtm
m.k4yes.pro/Blog/151353.shtm
m.k4yes.pro/Blog/919313.shtm
m.k4yes.pro/Blog/393557.shtm
m.k4yes.pro/Blog/393919.shtm
m.k4yes.pro/Blog/971559.shtm
m.k4yes.pro/Blog/708694.shtm
m.k4yes.pro/Blog/373135.shtm
m.k4yes.pro/Blog/531171.shtm
m.k4yes.pro/Blog/399795.shtm
m.k4yes.pro/Blog/195571.shtm
m.k4yes.pro/Blog/597357.shtm
m.k4yes.pro/Blog/973759.shtm
m.k4yes.pro/Blog/515573.shtm
m.k4yes.pro/Blog/919319.shtm
m.k4yes.pro/Blog/355197.shtm
m.k4yes.pro/Blog/991955.shtm
m.k4yes.pro/Blog/311971.shtm
m.k4yes.pro/Blog/131711.shtm
m.k4yes.pro/Blog/175953.shtm
m.k4yes.pro/Blog/191751.shtm
m.k4yes.pro/Blog/953353.shtm
m.k4yes.pro/Blog/195171.shtm
m.k4yes.pro/Blog/175199.shtm
m.k4yes.pro/Blog/155137.shtm
m.k4yes.pro/Blog/157199.shtm
m.k4yes.pro/Blog/111791.shtm
m.k4yes.pro/Blog/795133.shtm
m.k4yes.pro/Blog/599953.shtm
m.k4yes.pro/Blog/159973.shtm
m.k4yes.pro/Blog/515195.shtm
m.k4yes.pro/Blog/973713.shtm
m.k4yes.pro/Blog/177593.shtm
m.k4yes.pro/Blog/779991.shtm