web缓存-squid

安装:

cd /home/root
wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.20.tar.gz
tar zxvf squid-3.1.20.tar.gz
cd squid-3.1.20
./configure --prefix=/usr/local/squid
make && make install

这个要说明一下,尝鲜不一定是好事,因为我此时先下了最新版本3.2.1安装,结果就报错,然后才转为安装3.1.20,一点问题都没有。这是经验之谈,最后那个版本号越大的越保险。

 

配置文档:

http://www.squid-cache.org/Doc/config 

结合实际应用场景的原理解释:

http://www.cnblogs.com/PeterBi/archive/2011/03/25/1995228.html 

反向代理,负载均衡集群配置:

http://www.ibm.com/developerworks/cn/linux/l-cn-squid/

上面的链接解决了我的疑惑,cache_peer 这个配置既可以配置兄弟代理服务器,也可以配置原始服务器。

看这个配置会明白很多:

cache_effective_user squid 
 cache_effective_group squid 
 ######### 设定 squid 的主机名 , 如无此项 squid 将无法启动
 visible_hostname squid1.nlc.gov.cn 
 ############# 配置 squid 为加速模式 ################# 
 http_port 80 accel vhost vport 
 icp_port 3130 
 ##### 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时,
          通过 ICP 查询去其邻居中取得缓存
 cache_peer squid2.ibm.com.cn sibling 80 3130 
 cache_peer squid3.ibm.com.cn sibling 80 3130 
 ##### squid1 的三个父节点,originserver 参数指明是源服务器,
 round-robin  参数指明 squid 通过轮询方式将请求分发到其中一台父节点;
 squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了,
那么 squid 会从剩余的 origin 服务器中抓取数据
 cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin \ 
                                              name=webServer1 
 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin \ 
                                              name=webServer2 
 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin \ 
                                            name=webServer3 
 #### 将 wenjin.cache.ibm.com.cn 域的请求通过 RR 轮询方式转发到三个父节点中的一个
 cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.ibm.com.cn 
 ##### 下面是一些访问控制、日志和缓存目录的设置
 acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225 
 acl all src 0.0.0.0/0.0.0.0 
 http_access allow all 
 icp_access allow localnet 
 cache_log /usr/local/squid/var/logs/cache.log 
 access_log /usr/local/squid/var/logs/access.log squid 
 cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256 
 ####### 对 squid 的一些优化 ############### 
 maximum_object_size 10240 KB  ### 能缓存的最大对象为 10M 
 maximum_object_size_in_memory 512 KB ### 内存中缓存的最大对象 512K 
 cache_mem 256 MB  ###squid 用于缓存的内存量

 

Squid安装设试命令:

1,初始化你在 squid.conf 里配置的 cache 目录

#/usr/local/squid/sbin/squid -z //初始化缓存空间

如果有错误提示,请检查你的 cache目录的权限。

2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。

#/usr/local/squid/sbin/squid -k parse

如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。

3,在前台启动squid,并输出启动过程。

#/usr/local/squid/sbin/squid -N -d1

如果有到 ready to server reques,恭喜,启动成功。

然后 ctrl + c,停止squid,并以后台运行的方式启动它。

其实这种方式打印的就是cache.log的内容

这前三步是验证你是否能运行squid的重要步骤


4,启动squid在后台运行。

#/usr/local/squid/sbin/squid -s

这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。

5,停止 squid

#/usr/local/squid/sbin/squid -k shutdown

这个不用解释吧。

6,重引导修改过的 squid.conf

#/usr/local/squid/sbin/squid -k reconfigure //载入新的配置文件

这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。

7./usr/local/squid/sbin/squid -k rotate 轮循日志

8,把squid添加到系统启动项

编辑 /etc/rc.d/rc.local

添加如下行: /usr/local/squid/sbin/squid -s

利用Runc脚本........

 

 

关于配置问题:

#设置cache 内存大小为1G

cache_mem 1000 MB

#设置cache_dir 地址,第一个数字参数不能小于cache_mem设置的大小,否则会出警告“WARNING cache_mem is larger than total disk cache space!”,所以设为1000。16,256表示第一级和第二级目录。设置完了需用 squid -z来使cache目录生效。

cache_dir ufs /var/spool/squid 1000 16 256

 

注意

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

/16不是指0-16,16是指netmask

 

测试:

例如我有个应用在局域网192.168.0.2:10080/appweb/

我这样配置

cache_peer 192.168.0.2 parent 10080 no-query originserver

那么我将我的浏览器启用代理,将其指向我配置的squid服务器和对应端口。

那么我访问www.google.com/appweb/

嘿嘿,访问的其实是192.168.0.2:10080/appweb/

因为这里配置缓存服务器是192.168.0.2:10080

然而要注意squid默认只是缓存get请求,如果www.google.com/appweb/有个post的ajax请求www.google.com/appweb/ajax的话,squid还是会找实际的www.google.com/appweb/ajax的。

 

查看日志:

tail -f /usr/local/squid/var/logs/access.log

日志意义:

http://wiki.squid-cache.org/SquidFaq/SquidLogs#access.log

http://blog.csdn.net/starxu85/article/details/3256469

发现日志里一个HIT也没有,晕!倒是有些TCP_REFRESH_UNMODIFIED/304

从浏览器中看,似乎TCP_REFRESH_UNMODIFIED/304对应的资源是命中的。X-Cache HIT from xxx.xxx.COM

搞不懂。

squid命中又有很多因素,它和http 请求状态(头部信息)有很大关系,另外带参数的get请求也是默认不缓存的。

 

另外测试squid,也可以配置一个dns服务器,然后使用浏览器来访问测试。

参见DNS  server配置 http://blog.ureshika.com/archives/896.html

 

 

参见:

http://blog.51yip.com/server/638.html squid cache 服务器端的安装,配置

http://blog.51yip.com/apachenginx/898.html apache利用mod_cache缓存图片等

http://blog.51yip.com/cache/618.html varnish cache 反向代理服务器和http加速器的安装和配置

http://www.cnblogs.com/sxwgf/archive/2012/03/10/2389470.html 浅谈Squid在图片存储架构中的应用

http://os.51cto.com/art/201009/225813.htm 巧用Squid的ACL和访问列表实现高效访问控制

Continue reading web缓存-squid

CLaunch和vstart

办公我目前还是使用的xp系统,桌面上一堆快捷方式,听说CLaunch比较好,就用了一下,感觉如下:

界面太简单,刚开始我都不知道怎么用,不知道怎么设置快捷键,设置界面拉长,结果有些部分看不见(在win7下没有这个问题)。

没有搜索功能!这个怎么会没有呢,要是有该多。

批量导入快捷方式不方便,我的做法是把桌面的快捷方式拖到Claunch中去,结果很多快捷方式导入无效(点击没作用),看来批量导入的效果不行,最后我还是一个个导入的。-----这个是由于这种方式的导入是指向拖进来的快捷方式,例如我在桌面上建个文件夹的快捷方式,将其拖入Claunch,这样导入的快捷方式是指向桌面这个快捷方式的快捷方式(有点拗口),如果你将桌面的快捷方式删除了,那么claunch中的快捷方式由于找不到这个文件所以就不起作用了。

有些快捷方式导入不了。例如skype,outlook这样形式的快捷方式,导入后不起作用。

我来讲一下怎样设置快捷键,这个网上讲得少:

以设置显示/隐藏 CLaunch主界面为例:

右键Claunch托盘图标,点击options,出现设置界面:

Snap1

如上图所示,这里是设置显示主界面快捷键,红框中是要设置的快捷键(在键盘上按对应的键即可)。

Snap2

如上图所示,这里是设置隐藏主界面快捷键,红框中是要设置的快捷键。

我也不太清楚Assigned key和Hot key的区别,反正大家看图,如果不照着做就不行。

这样就设置好了。

 

这里也顺便说说Vstart(音速启动):

我的系统安装后,它默认的快捷方式中文的都是乱码,我将其全部删除,然后再导入,又不是乱码了。

它主界面上有个搜索框,但是是网页搜索而不是我最想要的快捷方式搜索,它的快捷方式搜索要右键点击出搜索菜单项再来搜索,这样的设计真是厉害哈!

如果是win7用户这个东西基本就是鸡肋了。

Continue reading CLaunch和vstart

我来说说行高 line-height 和 内联 inline 以及字体

这次碰到个问题,我使用了一个span元素,样式定义为

line-height:1.5;

使用firebug查看,box高度并没有变化,但是其父元素的高度却增加了。

捣鼓了半天才明白,原来span默认是内联,内联元素的height和line-height不会对其box高度起作用。

但是line-height虽不影响本身,但是会影响最近的block显示的祖先元素box高度。(因为line-height定义是相邻行文字基线间的距离。)

height则不会影响本身和祖先元素。

如果将span设置为block显示,那么height和line-heigt将会影响到元素本身box高度。

还发现如果是html5 DOCTYPE效果不会一样,似乎高度要高一点。

 

然后看看字体,从英文排版到中文排版,line-height是一样的,不回因为字体改变而影响高度,但是主要的问题是安全的中文字体好看的真是没有。

 

目前公认最安全的是arial,兼顾中西,win和mac。但是arial也不是很好看,而且字体大小最好不要小于12px,否则看着像蚂蚁团,模糊不清。

 

参见:

http://www.cnblogs.com/rainman/archive/2011/08/05/2128068.html 深入理解CSS中的行高

http://dancewithnet.com/2009/11/22/default-web-font-style/  默认Web字体样式

Continue reading 我来说说行高 line-height 和 内联 inline 以及字体

wordpress模板开发

文档主页:http://codex.wordpress.org/Templates

开发文档:http://codex.wordpress.org/Theme_Development 【重要】

版本兼容问题:http://codex.wordpress.org/Migrating_Plugins_and_Themes

页面导航,wp怎样查找该运行哪个脚本?http://codex.wordpress.org/Template_Hierarchy

安全输出:http://codex.wordpress.org/Theme_Development#Untrusted_Data

 

官方默认的模板是最好的例子。

样式描述是在 style.css 开头的注释中

 

页面(Page)

是通过admin面板中页面菜单来添加的,其url为 站点url/页面别名 组成。模板是page-页面别名

例如新建页面别名为testpage,那么会找page-testpage.php作为模板。

 

自定义文章类型:

http://codex.wordpress.org/Post_Types

是需要通过代码注册新类型:

add_action( 'init', 'create_post_type' );
function create_post_type() {
	register_post_type( 'acme_product',
		array(
			'labels' => array(
				'name' => __( 'Products' ),
				'singular_name' => __( 'Product' )
			),
		'public' => true,
		'has_archive' => true,
		)
	);
}

这样会在admin面板中添加个Product菜单,创建的新文章url为 站点url/archives/类型名/文章title 组成。(具体链接地址还和你的链接设置相关)

例如上面代码Product类型新建文章名为testpost,则会找single-acme_product.php作为模板,url应该是站点url/archives/acme_product/testpost

注意,当刚刚添加新类型时,会发现刚发布的此类型文章无法访问,可在固定链接设置中点一下提交按钮刷新wordpress设置,这样就可以看到新发布的类型文章了。

register_post_type 函数有许多参数,像上面的public如果为false,那么不仅普通网友无法看到此类型的文章,并且admin面板里也没这个菜单。不知道这样的设置有什么作用!

Continue reading wordpress模板开发

Extjs 性能降低的可能原因

见天终于找出一个问题,我们的应用要打开一个Ext.Window窗口,然后可以关闭它再打开。问题是,第一次打开很好,速度不错,再以后打开就非常慢,有时甚至达到5秒以上的延迟。由于系统比较复杂,开始一直找的是网络问题,服务端调用问题,后来发现不是这些原因,而是Extjs绘制很慢。

逐个排除,发现是多了这么一句话 renderTo: document.body,

这样导致在调用show之前就绘制了一次,然后show又绘制了一次。后来发信这个问题别人也遇到过了。

http://blog.csdn.net/tianxiaode/article/details/6525486

另外一个问题是,有个Ext.window里面有个很大的dom元素,我们发现使用hide(),show()方法显示比较卡,有时甚至几秒钟。我们的解决方法是,要隐藏时将这个window位置设置到用户看不到的地方,要显示时再把它移回来。这样明显速度快多了。发现Extjs本身就是使用这种方式来显示隐藏对话框的。看来这确实是个问题。

现在看来,Extjs使用还真得小心,你说C容易内存泄露,Extjs也会。如果不注意尾巴的话,你打开dom树,就会发现一堆垃圾在那没回收,到后来就是越来越慢。

 

--如果给我一个美工,我将丢弃Extjs。

Continue reading Extjs 性能降低的可能原因

background-attachment:fixed 问题

今天发现background-attachment:fixed原来不是这么简单:

见:http://reference.sitepoint.com/css/background-attachment

The value fixed stops the background-image from scrolling with its containing block. Note that although the fixed background-image may be applied to elements throughout the document, its background-position is always placed in relation to the viewport. This means the background-image is only visible when its background-position coincides with the content, padding, or border area of the element to which it is applied. Thus, a fixed background-image doesn’t move with elements that have a scrollbar—see overflow—because it’s placed in relation to the viewport.

我真是晕,fixed的情况下,不管background-attachment:fixed设置到哪个元素,其background-position是依据body来定位的。

使用background-attachment:scroll则是相对本元素定位。

测试FF,IE8,Chrome都是这样。

 

可依据这个例子来看:

><html> <head> <style type="text/css"> .hi { height:200px; width:200px; border:1px solid blue; background-image:url('eg_bg_03.gif'); background-repeat:no-repeat; background-attachment:fixed; background-position:left top; padding: 0px; }

Continue reading background-attachment:fixed 问题

Photoshop转ico插件

这段时间补了一下PS的课,稍微熟悉了点,但还是很多地方不熟,用七拼八凑的知识做了个本站的logo:

logok

还凑合吧。

这里说一下PS转ico的插件,PS不知为什么不支持存储为ico,所以还得下个插件来保存:

http://www.telegraphics.com.au/svn/icoformat/trunk/dist/README.html

安装方法上面有,不过这里没找到下载地址,还是到

http://www.hiliuyun.cn/wp-content/uploads/2010/01/PhotoShop-ico-lpugin.zip

这里下载的。

 

参见:

http://www.hiliuyun.cn/2010/01/photoshop-png%E6%A0%BC%E5%BC%8F%E8%BD%ACico%E6%8F%92%E4%BB%B6.html

Continue reading Photoshop转ico插件

XPath namespace的情况

今天使用Dom4j取节点,试了半天都没取到,真是很纳闷,用了这么久的函数今天突然不行了?仔细一看,原来xml节点带名空间。

下面引用自: http://www.cnblogs.com/PunkChen/archive/2008/04/02/1134304.html

xml代码example:
<report  xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.15" id="1">
    <list-property name="cssStyleSheets">
        <structure>
            <property name="fileName">D: eport.css</property>
        </structure>
    </list-property>
</report>
第一个方案.设置你的xpath的命名空间setNamespaceURIs

public class TransferXML {
    public static void main(String[] args) throws Exception{
        Map map = new HashMap();
        map.put("design","http://www.eclipse.org/birt/2005/design");
        SAXReader saxReader = new SAXReader();
        File file = new File("D:\test.xml");
        Document document = saxReader.read(file);
        XPath x = document.createXPath("//design:list-property");
        x.setNamespaceURIs(map);
        List nodelist = x.selectNodes(document);
        System.out.println(nodelist.size());
    }
}
第二个解决方案:设置你的DocumentFactory()的命名空间 setXPathNamespaceURIs
public class TransferXML {
    public static void main(String[] args) throws Exception{
        Map map = new HashMap();
        map.put("design","http://www.eclipse.org/birt/2005/design");
        SAXReader saxReader = new SAXReader();
        File file = new File("D:\test.xml");
        saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
        Document document = saxReader.read(file);
        List tmp = document.selectNodes("//design:list-property");
        System.out.println(tmp.size());
    }
}
第三种方法:本人用的,最笨也是最通用的方法,就是不使用开发环境给你提供的一系列对象,而是用XPath语法中自带的local-name() 和 namespace-uri() 指定你要使用的节点名和命名空间。
当你遇到使用xslt来样式化xml时,就知道这个笨方法的好处了:
public class TransferXML {
    public static void main(String[] args) throws Exception
        SAXReader saxReader = new SAXReader();
        File file = new File("D:\test.xml");
        Document document = saxReader.read(file);
        List tmp = document.selectNodes("//*[local-name()='report' and namespace-uri()='http://www.eclipse.org/birt/2005/design']/* [local-name()='list-property']");
        System.out.println(tmp.size());
    }
}

我觉得第三种最方便,虽然有点繁琐,往往那个名空间是多余的东西,我们处理的数据不需要关心它,所以使用低三种方法时,可以将and namespace-uri()='http://www.eclipse.org/birt/2005/design 这个条件不要,那么不管它是什么名空间,只要是要选取得节点名就被包含了。

 

不得不吐槽:为什么不用json呢?

 

参见:

http://www.cnblogs.com/PunkChen/archive/2008/04/02/1134304.html

Continue reading XPath namespace的情况

再谈p3p与第三方cookie

之前的文章 http://blog.ureshika.com/archives/91.html 初略了解了一下p3p,这次重温一下。

P3P是w3c 开发的协议 Platform for Privacy Preferences Project (P3P)。

主要用途是:

允许第三方cookie使用,这样的场景例如:

一个站点A.com包含了一个iframe,这个iframe指向了另外一个域的站点B.com。

那么B想要设置cookie并有时需要获得它,这就是第三方cookie。

注意,这里B能设置的cookie的domain 值还是b.com,但是相对于整个页面来说访问的是A.com所以叫做第三方cookie,B.com仍然是不能操作A.com的cookie的,否则就乱套了。 这个其实也不存在什么跨域的意思。

要让B.com能操作它的第三方cookie,B.com的页面需要使用P3P header来让浏览器来允许它这样做。

什么情况会发生这种应用场景:

1:第三方访问统计分析网站。

2:A 站点集成其他站点应用。

 

参见:

http://blog.ureshika.com/archives/91.html

Continue reading 再谈p3p与第三方cookie

Pagination


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1