本文是对文件内网缓存方案的实现。
-
varnish作为缓存服务,部署在内网192.168.0.220,varnish只能本机访问(nginx),内网用户不能直接访问varnish,需要通过nginx代理来访问。
-
nginx作为varnish的代理,如果将来有更大规模的缓存,可以做负载均衡。
-
HttpSecureLinkModule 对请求(超时,防盗)验证,每个跳转到内网的url(带token和超时时间)都要经过nginx的验证,而且这个url会在很短时间失效,这样防止了内网用户盗用链接。
下面是一个请求的流程图:
配置地址:https://gist.github.com/3797290
varnish配置:
backend default {
.host = "hostname1.com";
}
acl access {
"192.168.0.220";
"localhost";
}
sub vcl_recv {
unset req.http.Cookie;
set req.grace = 3m;
#set req.url = regsub(req.url,"^(.+)(&token=.+)$","\1:");
if(req.url ~ "/varnish-ping"){
error 200 "OK";
}
if(!client.ip ~ access){
error 405 "Access Denied !";
}
if(req.url ~ ".*/attachment/.*"){
set req.http.host = "file.hostname";
set req.url = regsub(req.url,"/attachment/(.+)(&token=.+)$","/cache/attachment/\1");
#return (lookup);
}
return (lookup);
}
sub vcl_fetch {
if (beresp.status == 500) {
error 404 "File not Found!";
}
if (beresp.http.Content-Length == "0" || beresp.http.Content-Length == "" ) {
return (hit_for_pass);
}
set beresp.ttl = 90d;
set beresp.grace = 5m;
return (deliver);
}
nginx配置:
user root;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name 192.168.0.220;
#charset koi8-r;
#access_log logs/host.access.log main;
#varnish_host for get cache
set $varnish_host http://192.168.0.220:9350;
# ping for check varnish health
location ~ varnish-ping$ {
allow all;
proxy_pass $varnish_host;
}
# for contract
location / {
allow all;
root html;
proxy_pass $varnish_host;
secure_link $arg_token,$arg_expire;
secure_link_md5 my_keys_string$uri$arg_expire;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 404;
}
#if ( $args ~ ^(.+)(&token=.+)$ ) {
# set $args $1;
# set $varnish_host http://192.168.0.220:9350;
# rewrite ^(.+)$ $varnish_host$uri?$1 break;
# #rewrite ^(.*)$ "http://www.meituan.com"$args break;
#}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- 大小: 38 KB
分享到:
相关推荐
如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN.
varnish+lighttpd配置
构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器
Varnish+应用技术指南2 详细描述了Varnish的安装 配置和维护
适合中型企业的 网站架构 ,负载均衡——高可用,
使用Packer,Ansible和Vagrant的LAMP + Nginx + Varnish与Drupal和Mysql Packer脚本,用于生成AMI,Docker容器,Droplet,VM Box等。 然后根据需要将其后处理到无业游民的盒子中。 进一步与vagrantfile链接以进行...
Varnish 应用技术指南 \ 中文版的 PDF格式!
Ubuntu-Nginx-PHP5-fpm-Varnish:Ubuntu + NGINX的设置:wordpress + html5 + nodejs
lvs+heartbeat+varnish+nginx+eAccelerator+memcached 手把手让你实现开源企业级web高并发解决方案,有详细配置过程并有框架图。
nginx和php和varnish配置
Varnish 2.1.2 缓存负载,做反向代理缓存优于squid
在反向代理,web加速方面,varnish已经有足够能力代替squid。挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。 2.作者:Poul-Henning Kamp是FreeBSD的内核开发者之一。
varnish+cdn
前言*随着整个互联网的发展,产生了无数大大小小的网站,随之而来用户对网站UI和速度体验也在日益加强,对企业或者个人来说,赢得用户...对于网站缓存,目前主流的HTTP加速器主要有Varnish、Nginx_proxy、Squid等,随
squid、varnish、ngx_cache的性能测试对比报告
Varnish是一款高性能、开源的反向代理服务器和缓存服务器,其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一。Varnish采用全新的软件体系结构,和现在的硬件体系配合比较紧密。
本书的最后一部分是关于Nginx使用缓存技术的方法,共列举了Nginx使用的五大缓存,特别是广泛使用的代理缓存、Memcached和Varnish,另外对于Memcached服务器的使用贯穿了整套书。在本书中着重讲述了它的协议、原理...
第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 ...第57章 缓存技术――Varnish
第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 ...第57章 缓存技术――Varnish