Nginx 的 proxy_store 缓存方式可以把目标服务器的响应信息永久的缓存在本地磁盘中,其目录结构和请求URL结构一样。下次相同的请求就可以直接读取本地磁盘文件进行响应了。
现在有一个需求:需要尽可能的镜像一个WEB 后台管理系统(参考别人的系统设计_),也就是要把这个系统的静态文件(html/js/css…)和接口请求数据都保存在本地。如果是单个网页倒也简单,直接浏览器右键 另存就可以搞定,要另存整个系统的话是比较麻烦的,刚好Nginx的 proxy_store可以完成。
Nginx 配置如下:
server {
listen 80;
location =/ {
# 用户直接通过域名或者IP访问是直接重定向到系统首页
return 302 $scheme://$host/index;
}
location / {
# 这里面处理所有请求
if (!-e $request_filename) {
# 该请求第一次访问,需要访问真实的目标服务器。也就是要镜像的服务器
proxy_pass https://admin.xxx.com;
}
root F:\data;
expires 3d;
# 开启proxy_store,
proxy_store on;
proxy_temp_path F:/data/cache;
# 这里是为了防止目标服务器对响应信息进行gzip压缩
proxy_set_header Accept-Encoding '';
# 让目标服务器以为该请求是通过它的域名进行访问的,不然他可能会把请求重定向会目标服务器
proxy_set_header Host 'admin.xxx.com';
# 取消响应的Content-Type,不然访问镜像的时候会出现文件下载的情况
default_type "";
}
error_page 405 = @405;
location @405 {
# 因为proxy_store不支持POST请求,通过把POST转GET完成正常响应
return 302 $scheme://$host$request_uri;
}
}
第一步需要拿到管理系统的一个账号密码,先登录他的系统拿到认证凭证(也就是jsessionId);然后访问我自己的nginx服务,先随便访问一个不存在的路径,通过浏览器控制台将拿到的jsessionId写入cookie.然后就输入正常路径就可以正常访问系统了,这个时候只需要疯狂点击系统的每个功能就行啦。
搞定 杀国!