linux pdf2swf,pdf在线打开

大家好,如果您还对linux pdf2swf不太了解,没有关系,今天就由本站为大家分享linux pdf2swf的知识,包括pdf在线打开的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

怎么把dos格式转换成linux格式

怎么把dos格式转换成linux格式?

有时我们在Windows下面写了一些指令码想要放到Linux下面执行的时候会出错。一个原因就是Windows使用DOS格式的档案,而Linux使用Unix格式的档案。

可以使用下面的命令检视档案的格式。

vim start_zookeeper_all.sh:set fileformat

如果是fileformat=dos,我们可以使用下面的命令方便的将其转化成Linux的档案格式。

vim start_zookeeper_all.sh

:set fileformat=unix:wq

怎么把dos格式转换成linux格式吗

dos格式档案传输到linux系统时,会在每行的结尾多一个^M,当然也有可能看不到,我们可以将dos档案转换为unix档案格式。

1、转换方法

vi dos.txt

:set fileformat=unix

:w

2、用命令:set ff

可以看到dos或unix的字样.

3、set ff=unix把它强制为unix格式的,然后存档退出,即可.

4、也可以用sed这样的工具来做:

sed‘s/^M’ filename> tmp_filename

其中^M是同时Ctrl+V+M按出来的,表示回车。

5、其它“怪招”:

a).使用vi

vi dos_file.txt

:%s/^Mg

其中^M必须是同时按 Ctrl+V+M,表示回车。不是直接输入 ^M,那没有用的,:-)。

b).使用tr

命令:tr-d“\015” dos_file.txt

c)使用perl

cat dos_file.txt| perl-pe‘~s/\rg’> unix_file.txt

怎样把RAR格式转换成MED格式?怎样把SIS格式转换成MED格式?

rar格式是压缩包!解压出来,看看里面有没有你要的MED格式。

sis格式是手机S60作业系统专用的可执行档案,没法转换。

怎样将pdf格式转换成dos格式?

我估计你问问题问错了,是转换成DOC格式吧?

下载一个pdf to word转换一个就好了

怎么把vsp格式转换成flv格式

vsp是会声会影的编辑档案,你只要通过会声会影的就可以转换成FLV格式。

方法:开启会声会影——选单栏“分享”——建立视讯档案,选择你想要的档案格式,就OK了

怎么把RM格式转换成RMVB格式?

使用格式工厂。

格式工厂(Format Factory)是由上海格式工厂网路有限公司创立于2008年2月,是面向全球使用者的网际网路软体。格式工厂致力于帮使用者更好的解决档案使用问题,现拥有在音乐、视讯、图片等领域庞大的忠实使用者,在该软体行业内位于领先地位,并保持高速发展趋势。

所有型别视讯转到MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV,新版支援RMVB(rmvb需要安装Realplayer或相关的译码器)、xv(迅雷独有的档案格式)转换成其他格式。

所有型别音讯转到MP3、WMA、FLAC、AAC、MMF、AMR、M4A、M4R、OGG、MP2、WAV

所有型别图片转到JPG、PNG、ICO、BMP、GIF、TIF、PCX、TGA

支援移动装置:索尼(Sony)PSP、苹果(Apple)iPhone&iPod、爱国者(Aigo)、爱可视(Archos)、多普达(Dopod)、歌美(Gemei)、iRiver、LG、魅族(MeiZu)、微软(Microsoft)、摩托罗拉(Motorola)、纽曼(New*** y)、诺基亚(Nokia)、昂达(Onda)、OPPO、RIM黑莓手机、蓝魔(Ramos)、三星(Samsung)、索爱(SonyEricsson)、台电(Teclast)、艾诺(ANIOL)和移动装置相容格式MP4、3GP、AVI。

转换DVD到视讯档案,转换音乐CD到音讯档案。DVD/CD转到ISO/CSO,ISO与CSO互转原始档支援RMVB。

可设定档案输出配置(包括视讯的萤幕大小,每秒帧数,位元率,视讯编码;音讯的取样率,位元率;字幕的字型与大小等)。

怎么把tif格式转换成dwg格式?

你先用WinTopo Professional向量化你扫描了的名字“tif格式”然后储存为dxf档案。

祝成功,谢谢!

怎么把 rmvb格式转换成 AMV格式

AMV精灵是国内第一款最小巧的AMV格式视讯转换工具,它支援 AVI ASF WMV MPG MPEG MOV DAT RM VOB等多种视讯格式转换为AMV格式。相对于MTV格式来说,AMV视讯格式比MTV视讯格式有着更好的压缩比例以及画面质量。通过AMV精灵转换出来的影音档案一分钟的容量大约在1.6MB--1.8MB左右。

换算后可得知,一部256MB的视讯MP3播放器可存放约130分钟的AMV格式的电影,因此使用者可以将一部电影从头看到尾,不存在看半截的遗憾了,从而真正让视讯MP3播放器成为“电影播放机”,所以AMV视讯格式被越来越多的厂家所采用。

转换说明

详细步骤请看(狂详细) AMV精灵帮助.chm(713 KB)

安装完毕后,开启AMV精灵。(注意:其实从网上下的解压包解压后不需要点安装什么的,因为解压后就是可以直接执行的程式了,开启这个叫AMV转换精灵.EXE的档案就可以转了)

此软体为中文,所以操作很容易。

“输入档案”指定要转换的原始档路径。可以点右边的资料夹图示来选择你要转换的原始档。

“输出档案”设定转换后的档案的存放位置。可以点右这的光碟图示改变路径。

“输出资讯”这里显示要转换的视讯的大小及长度等资讯。

输出资讯右边的齿轮图示为转换档案的属性设定,在列表先选择要设定的档案,然后点选它,就会弹出对话方块设定相关属性。

设定完成以后,点选下面的双箭头的图示,开始转换,最下面为转换进度,转换完成后,软体自动呼叫AMV播放器播放,验证档案是否能正常播放。

此工具支援批量转换。是个非常小巧,但功能强大的工具。

怎么把.dsp格式转换成.ppt格式

PowerCONVERTER是一款可以帮助你将PowerPoint文件转换成Flas***档案的利器!主要功能有:可缩小档案,压缩比高达97%;更高的安全性,不易被病毒感染,不可更改;便于浏览;流媒体格式,启动更快;可储存为.swf;可储存为可执行档案。要注意的是,安装好以后,开启ppt档案就会有一个按钮,按几下就可以生成swf或者exe格式了,但是很多互动功能会消失,特别是超级连结等。

怎么把Mac格式转换成windows格式

!直接在电脑上执行PE,里面有个分割槽软体会自动分成NIFS格式的,现在系统都是这个格式的

百度ueditor能不能上传pdf

MuaRine

博客园

首页

新随笔

联系

管理

随笔- 96文章- 0评论- 12

百度Ueditor在线编辑器的配置和图片上传

一、在线编辑器在页面正常显示

1.上百度Editor首页下载

2. COPY到自己的项目中去,然后记住ueditor所在文件的目录

3.配置editor_config.js中的URL(这一步很重要),因为我在html文件中测试的时候是没有修改配置文件的信息也可以用,但是用在项目编辑器就无法显示

/**

*此处配置写法适用于UEditor小组成员开发使用,外部部署用户请按照上述说明方式配置即可,建议保留下面两行,以兼容可在具体每个页面配置window.UEDITOR_HOME_URL的功能。

*/

var tmp= location.protocol.indexOf("file")==-1? location.pathname: location.href;

URL= window.UEDITOR_HOME_URL||tmp.substr(0,tmp.lastIndexOf("\/")+1).replace("_examples/","").replace("website/","");//这里你可以配置成ueditor目录在您网站的相对路径或者绝对路径(指以http开头的绝对路径)

/**

*配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。

*/

window.UEDITOR_CONFIG={

//为编辑器实例添加一个路径,这个不能被注释

UEDITOR_HOME_URL: URL

//图片上传配置区

,imageUrl:URL+"jsp/imageUp.jsp"//图片上传提交地址

,imagePath:URL+"jsp/"//图片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置

图片上传路径配置区域是在:ueditor.config.js里URL路径是直接指向了ueditor所在项目中的位置。如:/tools/editor/

原因是window.UEDITOR_HOME_URL没有定义,只要在引入script脚本前声明并复制就可以正常使用了,见下代码:

<!DOCTYPE HTML>

<html>

<head>

<title>完整的demo</title>

<meta http-equiv="Content-Type" content="text/html;charset=gbk"/>

<script>

var UEDITOR_HOME_URL="/ueditor/";//从项目的根目录开始

</script>

<link type="text/css" href="./themes/default/css/ueditor.css" rel="stylesheet"/>

<script type="text/javascript" src="./editor_config.js"></script>

<script type="text/javascript" src="./editor_all.js"></script>

</head>

<body>

<div>

<script id="myEditor" type="text/plain">欢迎使用</script>

</div>

<script type="text/javascript">

//初始化

var ue= UE.getEditor('myEditor');

</script>

</body>

</html>

还有一点就是,如果没有引入editor.css文件那么部分功能的显示将会没有那么好看。(废话。。。)

二、图片上传

1.具体包括imageUp.jsp和Uploader.java这两个文件

2.在jsp页面中只需要引入正确Uploader.java所在的包就行。

3.剩下的工作就是在Uploader.java中修改图片上传的目录、制定文件名生成规则等等。做实现过程中让我很纠结的是:配置完成没问题了,但是就是图片上传不成功具体错误如下:

3.1在没有找到Uploader类的情况下就会报:网络设置不正确,上传失败(大概就是这个意思。。。)

3.2所有的工作都做完的情况下,上传图片就是不成功,捕获异常呢也捕获不到,最后设置断点之后才知道fii.hasNext()返回为false,根本原因就是:

因为我用的是S2SH框架,在web.xml中struts2过滤器中把*.jsp去掉,如下代码应该去掉,那就OK了:

1<filter-mapping>

2<filter-name>struts2</filter-name>

3<url-pattern>*.jsp</url-pattern>

4</filter-mapping>

1 public void upload() throws Exception{

2 boolean isMultipart= ServletFileUpload.isMultipartContent(this.request);

3 if(!isMultipart){

4 this.state= this.errorInfo.get("NOFILE");

5 return;

6}

7 DiskFileItemFactory dff= new DiskFileItemFactory();

8 String savePath= this.getFolder(this.savePath);

9 dff.setRepository(new File(savePath));

10 try{

11 ServletFileUpload sfu= new ServletFileUpload(dff);

12 sfu.setSizeMax(this.maxSize* 1024);

13 sfu.setHeaderEncoding("gbk");

14 FileItemIterator fii= sfu.getItemIterator(this.request);

15 while(fii.hasNext()){

16 FileItemStream fis= fii.next();

17 if(!fis.isFormField()){

18 this.originalName= fis.getName().substring(fis.getName().lastIndexOf(System.getProperty("file.separator"))+ 1);

19 if(!this.checkFileType(this.originalName)){

20 this.state= this.errorInfo.get("TYPE");

21 continue;

22}

23 this.fileName= this.getName(this.originalName);

24 this.type= this.getFileExt(this.fileName);

25 this.url= savePath+"/"+ this.fileName;

26 BufferedInputStream in= new BufferedInputStream(fis.openStream());

27 FileOutputStream out= new FileOutputStream(new File(this.getPhysicalPath(this.url)));

28 BufferedOutputStream output= new BufferedOutputStream(out);

29 Streams.copy(in, output, true);

30 this.state=this.errorInfo.get("SUCCESS");

31//UE中只会处理单张上传,完成后即退出

32 break;

33} else{

34 String fname= fis.getFieldName();

35//只处理title,其余表单请自行处理

36 if(!fname.equals("pictitle")){

37 continue;

38}

39 BufferedInputStream in= new BufferedInputStream(fis.openStream());

40 BufferedReader reader= new BufferedReader(new InputStreamReader(in));

41 StringBuffer result= new StringBuffer();

42 while(reader.ready()){

43 result.append((char)reader.read());

44}

45 this.title= new String(result.toString().getBytes(),"gbk");

46 reader.close();

47}

48}

49} catch(Exception e){

50 e.printStackTrace();

51 this.state= this.errorInfo.get("UNKNOWN");

52}

53}

写博客不仅是一种习惯,更是一种沉淀。

分类: Java, Java Web, JEECMS

好文要顶关注我收藏该文

MuaRine

关注- 8

粉丝- 16

+加关注

0

0

(请您对文章做出评价)

«上一篇:Android系统平台架构+目录说明

»下一篇:Scroll-Jquery列表无间隙滚动

posted@ 2013-05-30 19:58 MuaRine阅读(92021)评论(1)编辑收藏

评论列表

#1楼2016-03-07 10:04 We_Are_Friends!

哥们,你好

请问,编辑的内容包括图片,上传到服务器的格式是什么,服务器如何得到图片

另外,有asp mvc现成的代码么

谢谢

支持(0)反对(0)

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请登录或注册,访问网站首页。

最新IT新闻:

·虚拟现实和计算机带来的艺术堪称梦幻

· Win 10系统最应该加入的5项功能你同意吗?

·搜狗公布第二季度财报营收11.5亿净利2.2亿元

·网易证实原网易音乐高级总监王磊已于4月离职

· Google说,手游要出海赚国际友人的钱

»更多新闻...

最新知识库文章:

·可是姑娘,你为什么要编程呢?

·知其所以然(以算法学习为例)

·如何给变量取个简短且无歧义的名字

·编程的智慧

·写给初学前端工程师的一封信

»更多知识库文章...

公告

昵称:MuaRine

园龄:4年1个月

粉丝:16

关注:8

+加关注

我的标签

Jquery(2)

PHP、LAMP(1)

Android(1)

cocos2d-x(1)

GAE翻墙(1)

随笔分类

Ajax(1)

Android错误(3)

Android小想法

Android小知识(7)

C/C++(3)

cocos2d-x(4)

CSS

DataBase(2)

FreeMarker(6)

Hibernate(4)

Html(5)

Html5

iBATIS

Java(19)

Java Web(17)

JavaScript(1)

JEECMS(14)

Jquery(9)

Linux(1)

Lua

Lucene

Mysql

Resin(1)

Spring(1)

SSO(1)

Struts(4)

Tomcat(2)

代码管理(3)

数据库(3)

心得体会(9)

杂记(10)

Link

JC

九九

能能大叔

晓峰哥

志志

最新评论

1. Re:百度Ueditor在线编辑器的配置和图片上传

哥们,你好

请问,编辑的内容包括图片,上传到服务器的格式是什么,服务器如何得到图片

另外,有asp mvc现成的代码么

谢谢

--We_Are_Friends!

2. Re:Data truncation: Data too long for column'id' at row 1

貌似解决不了批处理executeBatch()的相同异常...

--mengrennwpu

3. Re:链式编程----可以为你省去很多重复的代码

如果再加上泛型的话,代码就更加叼了

--愤怒的TryCatch

4. Re:链式编程----可以为你省去很多重复的代码

如果再加上泛型的话,代码就更加叼了

--我们的阳光很盐

5. Re:链式编程----可以为你省去很多重复的代码

如果再加上泛型的话,代码就更加叼了

--kk_cockroach

阅读排行榜

1. JSON--List集合转换成JSON对象(146445)

2.百度Ueditor在线编辑器的配置和图片上传(92021)

3. SVN客户端无法连接服务器的问题(34990)

4. Oracle起步---创建临时表空间/表空间/创建用户/授权(26163)

5. Data truncation: Data too long for column'id' at row 1(19129)

推荐排行榜

1. SVN客户端无法连接服务器的问题(3)

2. JSON--List集合转换成JSON对象(3)

3.链式编程----可以为你省去很多重复的代码(2)

4. Oracle起步---创建临时表空间/表空间/创建用户/授权(1)

5.用js判断页面是否加载完成(1)

Copyright©2016 MuaRine

Linux下Varnish缓存服务器的安装与配置教程

Varnish是一款高性能且开源的反向代理服务器和http加速器。与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点。作者Poul-Henning Kamp是FreeBSD的内核开发者之一。Varnish采用全新的软件体系架构,和现在的硬件提交配合紧密。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。

挪威最大的在线报纸 Verdens Gang()使用3台Varnish代替了原来的12台squid,性能居然比以前更好,这是Varnish最成功的应用案例。

Varnish特点:

1.基于内存进行缓存,重启后数据将消失

2.利用虚拟内存方式,I/O性能好

3.支持设置0~60秒的精确缓存时间

4.VCL配置管理比较灵活

5.32位机器上缓存文件大小最大为2G

6.具有强大的管理功能,例如top、stat、admin、list等

7.状态机设置巧妙,结构清晰

8.利用二叉堆管理缓存文件,可达到积极删除目的

Varnish与Squid的对比

Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,如下:

相同点:

都是一个反向代理服务器

都是开源软件

不同点,也是Varnish的优点:

Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启。

Varnish访问速度更快,Varnish采用了Visual Page Cache技术,所有缓存数据都直接从内存读取,而squid是从硬盘读取,因而Varnish在访问速度方面会更快。

Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快。因而在高并发连接情况下可以支持更多TCP连接。

Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。

squid属于是单进程使用单核CPU,但Varnish是通过fork形式打开多进程来做处理,所以是合理的使用所有核来处理相应的请求。

当然,与传统的Squid相比,Varnish也是有缺点的,如下:

varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。

在varnish使用中如果单个url的请求通过HA/F5(负载均衡)每次请求不同的varnish服务器中,被请求varnish服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成varnish的缓存的资源浪费,也会造成性能下降。

解决方案:

综上所述在访问量很大的情况下推荐使用varnish的内存缓存方式启动,而且后面需要跟多台squid服务器。主要为了防止前面的varnish服务、服务器被重启的情况下,前期肯定会有很多的穿透这样squid可以担当第二层cache,而且也弥补了varnish缓存在内存中重启都会释放的问题。

这样的问题可以在负载均衡上做url哈希,让单个url请求固定请求到一台varnish服务器上,可以解决该问题。

varnish的工作流程

1、进程之间通信

varnish启动或有2个进程 master(management)进程和child(worker)进程。master读入存储配置命令,进行初始化,然后fork,监控child。child则分配线程进行cache工作,child还会做管理线程和生成很多worker线程。

child进程主线程初始化过程中,将存储大文件整个加载到内存中,如果该文件超出系统的虚拟内存,则会减少原来配置mmap大小,然后继续加载,这时候创建并初始化空闲存储结构体,放在存储管理的struct中,等待分配。

接着varnish某个负责接口新http连接的线程开始等待用户,如果有新的http连接,但是这个线程只负责接收,然后唤醒等待线程池中的work线程,进行请求处理。

worker线程读入uri后,将会查找已有的object,命中直接返回,没有命中,则会从后端服务器中取出来,放到缓存中。如果缓存已满,会根据LRU算法,释放旧的object。对于释放缓存,有一个超时线程会检测缓存中所有object的生命周期,如果缓存过期(ttl),则删除,释放相应的存储内存。

2、配置文件各结构之间通信

Varnish安装

代码如下:

wget

tar xzf pcre-8.33.tar.gz

cd pcre-8.33

./configure

make make install

cd../

varnish-3.0.4报错如下:

varnishadm.c:48:33: error: editline/readline.h: No such file or directory

varnishadm.c: In function'cli_write':

varnishadm.c:76: warning: implicit declaration of function'rl_callback_handler_remove'

varnishadm.c:76: warning: nested extern declaration of'rl_callback_handler_remove'

varnishadm.c: In function'send_line':

varnishadm.c:179: warning: implicit declaration of function'add_history'

varnishadm.c:179: warning: nested extern declaration of'add_history'

varnishadm.c: In function'varnishadm_completion':

varnishadm.c:216: warning: implicit declaration of function'rl_completion_matches'

varnishadm.c:216: warning: nested extern declaration of'rl_completion_matches'

varnishadm.c:216: warning: assignment makes pointer from integer without a cast

varnishadm.c: In function'pass':

varnishadm.c:233: error:'rl_already_prompted' undeclared(first use in this function)

varnishadm.c:233: error:(Each undeclared identifier is reported only once

varnishadm.c:233: error: for each function it appears in.)

varnishadm.c:235: warning: implicit declaration of function'rl_callback_handler_install'

varnishadm.c:235: warning: nested extern declaration of'rl_callback_handler_install'

varnishadm.c:239: error:'rl_attempted_completion_function' undeclared(first use in this function)

varnishadm.c:300: warning: implicit declaration of function'rl_forced_update_display'

varnishadm.c:300: warning: nested extern declaration of'rl_forced_update_display'

varnishadm.c:303: warning: implicit declaration of function'rl_callback_read_char'

varnishadm.c:303: warning: nested extern declaration of'rl_callback_read_char'

make[3]:*** [varnishadm-varnishadm.o] Error 1

make[3]: Leaving directory `/root/lnmp/src/varnish-3.0.4/bin/varnishadm'

make[2]:*** [all-recursive] Error 1

make[2]: Leaving directory `/root/lnmp/src/varnish-3.0.4/bin'

make[1]:*** [all-recursive] Error 1

make[1]: Leaving directory `/root/lnmp/src/varnish-3.0.4'

make:*** [all] Error 2

报错没找到解决方法,选varnish-3.0.3

代码如下:

wget

tar xzf varnish-3.0.3.tar.gz

cd varnish-3.0.3

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

./configure--prefix=/usr/local/varnish--enable-debugging-symbols--enable-developer-warnings--enable-dependency-tracking--with-jemalloc

make make install

/usr/bin/install-m 755./redhat/varnish.initrc/etc/init.d/varnish

/usr/bin/install-m 644./redhat/varnish.sysconfig/etc/sysconfig/varnish

/usr/bin/install-m 755./redhat/varnish_reload_vcl/usr/local/varnish/bin

useradd-M-s/sbin/nologin varnish

代码如下:

ln-s/usr/local/varnish/sbin/varnishd/usr/sbin/

ln-s/usr/local/varnish/bin/varnish_reload_vcl/usr/bin/

ln-s/usr/local/varnish/bin/varnishadm/usr/bin/

代码如下:

chkconfig--add varnish

chkconfig varnish on

生成varnish管理秘钥:

代码如下:

uuidgen/usr/local/varnish/etc/varnish/secret

chmod 644/usr/local/varnish/etc/varnish/secret

修改varnish启动配置:

代码如下:

sed-i"s@^VARNISH_VCL_CONF=/etc/varnish/default.vcl@#VARNISH_VCL_CONF=/etc/varnish/default.vcl\nVARNISH_VCL_CONF=/usr/local/varnish/etc/varnish/linuxeye.vcl@"/etc/sysconfig/varnish

sed-i"s@^VARNISH_LISTEN_PORT=6081@#VARNISH_LISTEN_PORT=6081\nVARNISH_LISTEN_PORT=80@"/etc/sysconfig/varnish

sed-i"s@^VARNISH_SECRET_FILE=/etc/varnish/secret@#VARNISH_SECRET_FILE=/etc/varnish/secret\nVARNISH_SECRET_FILE=/usr/local/varnish/etc/varnish/secret@"/etc/sysconfig/varnish

sed-i"s@^VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin@#VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin\nVARNISH_STORAGE_FILE=/usr/local/varnish/var/varnish_storage.bin@"/etc/sysconfig/varnish

sed-i"s@^VARNISH_STORAGE_SIZE.*@VARNISH_STORAGE_SIZE=150M@"/etc/sysconfig/varnish

sed-i"s@^VARNISH_STORAGE=.*@VARNISH_STORAGE=\"malloc,\${VARNISH_STORAGE_SIZE}\"@"/etc/sysconfig/varnish

假设你的服务器拥有多颗逻辑处理器,还可以做以下的设置:

/etc/sysconfig/varnish里面还可以添加自定义的参数,用-p参数的方式添加,如:

DAEMON_OPTS=-a${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \

-f${VARNISH_VCL_CONF} \

-T${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \

-t${VARNISH_TTL} \

-w${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \

-u varnish-g varnish \

-S${VARNISH_SECRET_FILE} \

-s${VARNISH_STORAGE} \

-p thread_pools=2#这里为添加项

Varnish启动后进入后台运行,同时返回命令行状态。需要注意的是,Varnish运行时会同时启动两个进程,一个主进程,一个是子进程,如果子进程出现问题,主进程将重新生成一个子进程。

VCL配置

代码如下:

/usr/local/varnish/etc/varnish/linuxeye.vcl

#通过backend定义了一个名称为webserver的后端主机,.host指定后端主机的IP地址或者域名,.port指定后端主机的服务端口。

backend webserver{

  .host="127.0.0.1";

  .port="8080";

}

#调用vcl_recv开始

sub vcl_recv{

  if(req.restarts== 0){

if(req.http.x-forwarded-for){

   set req.http.X-Forwarded-For=

req.http.X-Forwarded-For+","+ client.ip;

} else{

   set req.http.X-Forwarded-For= client.ip;

}

  }

#如果请求的类型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE时,进入pipe模式。注意这里是的关系

    if(req.request!="GET"

    req.request!="HEAD"

    req.request!="PUT"

    req.request!="POST"

    req.request!="TRACE"

    req.request!="OPTIONS"

    req.request!="DELETE"){

return(pipe);

  }

#如果请求的类型不是GET与HEAD,则进入pass模式

  if(req.request!="GET" req.request!="HEAD"){

return(pass);

  }

  if(req.http.Authorization|| req.http.Cookie){

return(pass);

  } strong/strong#对linuxeye.com域名进行缓存加速,这是个泛域名的概念,也就是所有以linuxeye.com结尾的域名都进行缓存

  if(req.http.host~"^(.*).linuxeye.com"){

set req.backend= webserver;

  }

#对以.jsp、.do、php结尾以及带有?的URL时,直接从后端服务器读取内容

  if(req.url~"\.(jsp|do|php)($|\?)"){

return(pass);

  } else{

  return(lookup);

  }

}/p

psub vcl_pipe{

  return(pipe);

}/p

psub vcl_pass{

  return(pass);

}/p

psub vcl_hash{

  hash_data(req.url);

  if(req.http.host){

hash_data(req.http.host);

  } else{

hash_data(server.ip);

  }

  return(hash);

}/p

psub vcl_hit{

  return(deliver);

}/p

psub vcl_miss{

  return(fetch);

}

代码如下:

#对于请求类型是GET,并且请求的URL中包含upload,那么就进行缓存,缓存的时间是300秒,即5分钟

sub vcl_fetch{

  if(req.request=="GET" req.url~"^/upload(.*)$"){

    set beresp.ttl= 300s;

  }/p

p   if(req.request=="GET" req.url~"\.(png|gif|jpg|jpeg|bmp|swf|css|js|html|htm|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|txt)$"){

    unset beresp.http.set-cookie;

    set beresp.ttl= 30d;

  }

  return(deliver);

}

代码如下:

#下面是添加一个Header标识,以判断缓存是否命中

sub vcl_deliver{

  if(obj.hits 0){

    set resp.http.X-Cache="HIT from demo.linuxeye.com";

  } else{

    set resp.http.X-Cache="MISS from demo.linuxeye.com";

  }

  return(deliver);

}

代码如下:

#使用vcl_error可以定制一个错误页面

sub vcl_error{

  set obj.http.Content-Type="text/html; charset=utf-8";

  set obj.http.Retry-After="5";

  synthetic{"

?xml version="1.0" encoding="utf-8"?

!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN"

";

html

head

  title"}+ obj.status+""+ obj.response+{"/title

/head

body

  h1Error"}+ obj.status+""+ obj.response+{"/h1

  p"}+ obj.response+{"/p

  h3Guru Meditation:/h3

  pXID:"}+ req.xid+{"/p

  hr

  pVarnish cache server/p

/body

/html

"};

  return(deliver);

}/p

psub vcl_init{

return(ok);

}/p

psub vcl_fini{

return(ok);

}

检查VCL配置是否正确:

代码如下:

service varnish configtest

代码如下:

varnishd-C-f/usr/local/varnish/etc/varnish/linuxeye.vcl

启动varnish:

代码如下:

service varnish start

查看varnish状态:

代码如下:

service varnish status

动态加载VCL配置:

代码如下:

service varnish reload

停止varnish:

代码如下:

service varnish stop

查看当前varnish监听的80端口:

代码如下:

# netstat-tpln| grep:80

tcp       0     0 0.0.0.0:80                 0.0.0.0:*                  LISTEN     15249/varnishd

tcp       0     0 0.0.0.0:8080               0.0.0.0:*                  LISTEN     19468/nginx

tcp       0     0:::80                      :::*LISTEN     15249/varnishd

查看varnish进程:

代码如下:

# ps-ef| grep varnishd| grep-v grep

root    15248    1 0 11:47?       00:00:00/usr/sbin/varnishd-P/var/run/varnish.pid-a:80-f/usr/local/varnish/etc/varnish/linuxeye.vcl-T 127.0.0.1:6082-t 120-w 50,1000,120-u varnish-g varnish-S/usr/local/varnish/etc/varnish/secret-s malloc,150M

varnish 15249 15248 0 11:47?       00:00:00/usr/sbin/varnishd-P/var/run/varnish.pid-a:80-f/usr/local/varnish/etc/varnish/linuxeye.vcl-T 127.0.0.1:6082-t 120-w 50,1000,120-u varnish-g varnish-S/usr/local/varnish/etc/varnish/secret-s malloc,150M

Varnish访问日志

varnishncsa可以使用NCSA通用日志格式(NCSA Common Log Format)将HTTP请求记录到日志文件.

代码如下:

/usr/bin/install-m 755./redhat/varnishncsa.initrc/etc/init.d/varnishncsa

chmod+x/etc/init.d/varnishncsa

chkconfig varnishncsa on

mkdir-p/usr/local/varnish/logs

编辑varnishncsa启动配置

代码如下:

ln-s/usr/local/varnish/bin/varnishncsa/usr/bin

sed-i's@^logfile.*@logfile="/usr/local/varnish/logs/varnishncsa.log"@'/etc/init.d/varnishncsa

启动varnishncsa:

代码如下:

service varnishncsa start

使用logrotate轮询日志文件(每天轮询):

代码如下:

cat/etc/logrotate.d/varnish EOF

/usr/local/varnish/logs/varnishncsa.log{

daily

rotate 5

missingok

dateext

compress

notifempty

sharedscripts

postrotate

  [-e/var/run/varnishncsa.pid ] kill-USR1 \`cat/var/run/varnishncsa.pid\`

endscript

}

EOF

日志轮询debug测试:

代码如下:

logrotate-df/etc/logrotate.d/varnish

阅读剩余
THE END