不可不说
随心所欲,无往不利!
posts - 88,  comments - 92,  trackbacks - 0
Apache服务器走到那里,unix/linux就跟到那里,这足以说明在WEB服务器领域Apache的优良性能与市场占有率
这今天互联网的大环境下,web服务已经成为公司企业必不可少的业务,大多数的安全问题也跟随而来,攻击重点也转移为web攻击,许多web与颇有价值的客户服务与电子商业活动结合在一起,这也是吸引恶意攻击重要原因。

先来了解下web所面临的安全风险

HTTP拒绝服务攻击
攻击者通过某些手段使服务器拒绝对http应答,这使Apache对系统资源(cup时间与内存)需求巨增,最终造成系统变慢甚至完全瘫痪,Apache服务器最大的缺点是,它的普遍性使它成为众矢之的,Apache服务器无时无刻不受到DoS攻击威胁,主要有下边几种
1.数据包洪水攻击
一种中断服务器或本地网络的方法是数据包洪水攻击,它通常使用internet控制报文协议(ICMP,属于网络层协议)
包或是udp包,在最简单的形式下,这些攻击都是使服务器或网络负载过重,这意味这攻击者的网络速度必须比目标主机网络速度要快,使用udp包的 优势是不会有任何包返回到黑客的计算机(udp效率要比tcp高17倍),而使用ICMP包的优势是攻击者能让攻击更加富与变化,发送有缺陷的包会搞乱并 锁住受害者的网络,目前流行的趋势是攻击者欺骗服务器,让其相信正在受来自自身的洪水攻击
2.磁盘攻击
这是一种很不道德的攻击,它不仅影响计算机的通信,还破坏其硬件,伪造的用户请求利用写命令攻击目标计算机硬盘,让其超过极限,并强制关闭,结局很悲惨
3.路由不可达
通常DoS攻击,集中在路由器上,攻击者首先获得控制权并操纵目标机器,当攻击者能更改路由表条目时候,会导致整个网络无法通信,这种攻击很阴险,隐蔽,因为网络管理员需要排除的网络不通原因很多,其中一些原因需要详细分辨
4.分布式拒绝服务攻击
这也是最具有威胁的DDoS攻击,名称很容易理解,简单说就是群欧,很多客户机同时单条服务器,你会发现你将伤痕累累,Apache服务器特别容 易受到攻击,无论是DDos还是隐藏来源的攻击,因为Apache无处不在,特别是为Apache特意打造的病毒(特选SSL蠕虫),潜伏在许多主机上, 攻击者通过病毒可以操纵大量被感染的机器,对特定目标发动一次浩大的DDoS攻击,通过将蠕虫散播到大量主机,大规模的点对点攻击得以进行,除非你不提供 服务,要不然几乎无法阻止这样的攻击,这种攻击通常会定位到大型的网站上。

缓冲区溢出,这种攻击很普遍,攻击者利用CGI程序编写一些缺陷程序偏离正常的流程,程序使用静态的内存分配,攻击者就可以发送一个超长的请求使缓冲区溢出,比如,一些perl编写的处理用户请求的网关脚本,一但缓冲区溢出,攻击者就可以执行恶意指令

非法获取root权限
如果Apache以root权限运行,系统上一些程序的逻辑缺陷或缓冲区溢出漏洞,会让攻击者很容易在本地系统获取linux服务器上的管理者权 限,在一些远程情况下,攻击者会利用一些以root身份执行的有缺陷的系统守护进程来取得root权限,或利用有缺陷的服务进程漏洞来取得普通用户权限, 以远程登陆,进而控制整个系统。

这边这些都是服务将会遇到的攻击手段,下边来说,如何打造安全的Apache服务器
如果你能遵守下边这些建议,那么你将得到一台相对安全的apache服务器

一:勤打补丁
你必须要相信这个是最有用的手段,缓冲区溢出等漏洞都必须使用这种手段来防御,勤快点相信对你没有坏处
在http:www.apache.org上最新的changelog中都写有:bug fix ,security bug fix的字样,做为负责任的管理员要经常关注相关漏洞,及时升级系统添加补丁。使用最新安全版本对加强apache至关重要

二:隐藏和伪装Apache的版本
打乱攻击者的步骤,给攻击者带来麻烦,相信是管理员愿意看到的。软件的漏洞信息和版本是相关的,在攻击者收集你服务软件信息时候给与迷惑是个不错的选择,何况版本号,对攻击者来说相当与GPS定位一样重要
默认情况,系统会把apache版本模块都显示出来(http返回头),如果列举目录的话,会显示域名信息(文件列表正文),去除Apache版本号的方法是修改配置文件,找到关键字,修改为下边
ServerSignature off
ServerTokens prod

通过分析web服务器类型,大致可以推测操作系统类型,win使用iis,linux普遍apache,默认的Apache配置里没有任何信息保 护机制,并且允许目录浏览,通过目录浏览,通常可以得到类似“apache/1.37 Server at apache.linuxforum.net Port 80”或“apache/2.0.49(unix)PHP/4.3.8”的信息
通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来,如果不行的话,可能是提示信息被编译在程序里了,要隐藏需要修改apache的源代码,然后重新编译程序,以替换内容
编辑ap_release.h文件,
修改"#define AP_SERVER_BASEPRODUCT""Apache"""为
"#define AP_SERVER_BASEPRODUCT""Microsoft-IIS/5.0""
编辑os/unix/os.h文件
修改"#define PLATFORM""Unix"""为
"#define PLATFORM"'Win32"
修改完成后,重新编译,安装apache,在修改配置文件为上边做过的,再次启动apache后,用工具扫描,发现提示信息中已经显示为windows操作系统了
顺便说下,现在这个论坛,就有点不太讲究,这是论坛错误的返回信息,看了有点汗地感觉
Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g Server at forum.ubuntu.org.cn Port 80

这个等于告诉恶意用户很多有用信息,虽然说不算开了门,但等于被告诉了门在那里,还是相当危险的

三:建立安全的目录结构apache服务器包括四个目录结构
ServerRoot #保存配置文件,二进制文件与其他服务器配置文件
DocumentRoot #保存web站点内容,包括HTML文件和图片等
ScripAlias #保存CGI脚本
Customlog 和 Errorlog #保存日志和错误日志
建议的目录结构为,以上四种目录相互独立并且不存在父子逻辑关系
注:
ServerRoot目录只能为root用户访问
DocumentRoot目录应该能够被管理web站点内容的用户访问和使用apache服务器的apache用户与组访问
ScripAlias目录应该只能被CGI开发人员和apache用户访问
Customlog 和 Errorlog只能被root访问
下边是一个安全目录结构的事例
+-------/etc/
|
| +----/http (ServerRoot)
| +----/logs (Customlog 和 Errorlog)
|
+-------var/www
|
| +---/cgi-bin (ScripAlias)
| +---/html (DocumentRoot)

这样的目录结构是比较安全的,因为目录之间独立,某个目录权限错误不会影响到其他目录

四:为apache使用专门的用户与组
按照最小特权的原则,需要给apache分配一个合适的权限,让其能够完成web服务
注:
最小特权原则是系统安全中最基本的原则之一,限制使用者对系统及数据进行存取所需要的最小权限,保证用户可以完成任务,同时也确保被窃取或异常操作所造成的损失

必须保证apache使用一个专门的用户与组,不要使用系统预定的帐户,比如nobody用户与nogroup组
因为只有root用户可以运行apache,DocumentRoot应该能够被管理web站点内容的用户访问和使用apache服务器的 apache用户与组访问,例如,希望“test”用户在web站点发布内容,并且可以以httpd身份运行apache服务器,可以这样设定
groupadd webteam
usermod -G webteam test
chown -R httpd.webteam /www/html
chmod -R 2570 /www/htdocs
只有root能访问日志,推荐这样的权限
chown -R root.root /etc/logs
chown -R 700 /etc/logs

五:web目录的访问策略
对于可以访问的web目录,要使用相对保守的途径进行访问,不要让用户查看任何目录索引列表
禁止使用目录索引:
apache在接到用户对一个目录的访问时,会查找DirectoryIndex指令指定的目录索引文件,默认为index.html,如果该文件不存在,那么apache会创建动态列表为用户显示该目录的内容,这样就会暴露web站点结构,因此需要修改配置文件禁止显示动态目录索引,修改httpd.conf
Options -Indexes FollowSymLinks
Options指令通知apache禁止使用目录索引,FollowSymLinks表示不允许使用符号连接。
禁止默认访问:
要的安全策略必须要禁止默认访问的存在,只对指定的目录开放权限,如果允许访问/var/www/html目录,使用如下设定
Order deny,allow
Allow from all
禁止用户重载:
为了禁止用户对目录配置文件(htaccess)进行重载(修改),可以这样设定
AllowOverride None

六:apache服务器访问控制
apache的access.conf文件负责设置文件的访问权限,可以实现互联网域名和ip地址的访问控制
如允许192.168.1.1到192.168.1.254的主机访问,可以这样设定
order deny,allow
deny from all
allow from pair 192.168.1.0/255.255.255.0

七:apache服务器的密码保护
.htaccess文件是apache上的一个设置文件,它是一个文本文件,.htaccess文件提供了针对目录改变配置的方法
既通过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以作用于此目录和子目录。
.htaccess的功能包括设置网页密码,设置发生错误时出现的文件,改变首业的文件名(如,index.html),禁止读取文件名,重新导向文件,加上MIME类别,禁止目录下的文件等。
注:.htaccess是一个完整的文件名,不是***.htaccess或其他格式,在/abc目录下放置一个.htaccess文件,那么/abc与它的子目录都会被这个文件影响,但/index.html不会被影响

.htaccess的建立和使用比较复杂点,如果感兴趣的朋友可以回帖发问,这里就不 具体写出来了,这种保护要比某些程序实现的保护安全,那种方法可以通过被猜测方法获取密码,用.htaccess很难被破解,但文本方式的验证会比较慢, 对少量用户没影响,但对大量用户就必须使用带数据模块的验证了,这需要编译源代码时候开启模块,默认是不开启的

八:让apache运行在“监牢”中
“监牢”的意思是指通过chroot机制来更改某个软件运行时所能看到的根目录,简单说,就是被限制在指定目录中,保证软件只能对该目录与子目录文件有所动作,从而保证整个服务器的安全,即使被破坏或侵入,损伤也不大
以前,unix/linux上的daemon都是以root权限启动的,当时,这是一件理所当然的事情,像apache这样的服务器软件,需要绑 定到80端口上来监听请求,而root是唯一有这种权限的用户,随着攻击手段和强度的增加,这样会使服务器受到相当大的威胁,一但被利用缓冲区溢出漏洞, 就可以控制整个系统。现在的服务器设计通常以root启动,然后进程放弃root权限,改为某个低级的帐号运行。这种方式显然会降低对系统的危害,但攻击 者还是会寻找漏洞提升权限,即使无法获得root权限,也可以删除文件,涂改主页等
为了进一步提高系统安全性,linux内核引入chroot机制,chroot是内核中的一个系统调用,软件可以通过调用函数库的chroot 函数,来更改某个进程所能见到的跟目录,比如,apache软件安装在/usr/local/httpd目录,以root启动apache,这个root 权限的父进程会派生数个以nobody权限运行的子进程,父进程监听80端口,然后交给某个子进程处理,这时候子进程所处的目录续承父进程,即/usr /local/httpd目录,但是一但目录权限设定错误,被攻击的apache子进程可以访问/usr/local , /usr ,/tmp甚至整个文件系统,因为apache进程所处的跟目录仍然是整个文件系统的跟目录,如果可以用chroot将apache限制在/usr /local/httpd/下,那么apache所存取的文件都被限制在/usr/local/httpd下,创建chroot监牢的作用就是将进程权限 限制在文件目录树下,保证安全。
如果自己手动apache的监牢,将是很烦琐和复杂的工作,需要牵扯到库文件,这里可以使用jail包来简化监牢的实现
jail的官方网站为: 有兴趣可以逛逛
这里也不写出具体的创建过程稍微麻烦,如果对安全有需要的话,请回帖,会及时补上

九:apache服务器防范Dos
apache服务经常会碰到Dos攻击,防范的主要手段是通过软件,apahce Dos Evasive Maneuvers Module
来实现的,它是一款mod_access的代替软件,可以对抗DoS攻击,该软件可以快速拒绝来自相同地址对同一URL的重复请求,通过查询内部一张各子进程的哈希表来实现
可以到网址:http://online/.securityfocus.com/tools/ 上下载软件

十:减少CGI和SSI风险
CGI脚本的漏洞已经成为WEB服务器的首要安全隐患,通常是程序编写CGI脚本产生了许多漏洞,控制CGI的漏洞除了在编写时候注意对输入数据 的合法检查,对系统调用的谨慎使用等因素外,首先使用CGI程序所有者的ID来运行这些程序,即使被漏洞危害也仅限于该ID能访问的文件,不会对整个系统 带来致命的危害,因此需要谨慎使用CGI程序。
1.3版的apache集成了suEXEC程序,可以为apache提供CGI程序的控制支持,可以把suEXEC看做一个包装器,在Apache接到CGI程序的调用请求后,把这个请求交给suEXEC来负责完成具体调用,并从suEXEC返回结果,suEXEC可以解决一些安全问题,但会影响速度
如果是对安全性要求很高时候,建议使用suEXEC,此外还有一个软件CGIWrap,它的安全性要高与suEXEC

减少SSI脚本风险,如果用exec等SSI命令运行外部程序,也会存在类似CGI脚本风险,除了内部调试程序时,应使用
option命令禁止其使用:
Option IncludesNOEXEC

十一:使用ssl加固Apache
使用具有SSL功能的服务器,可以提高网站敏感页的安全性能,SSL工作与TCP/IP协议和HTTP协议之间
SSL可以加密互联网上传递的数据流,提供身份验证,在线购物而不必担心别人窃取信用卡信息,在基于电子商务和基于web邮件的地方非常重要。
SSL的应用相对还是比较麻烦的,有需要的话,可以发贴或查看资料,这几就不多写,篇幅不够
posted @ 2009-09-03 18:01 蓝剑 阅读(13193) | 评论 (1)编辑 收藏
从网上找到的,不知道好不好用,先存上,以后有机会测试一下。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class MyEclipseGen {
private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";
 
public String getSerial(String userId, String licenseNum) {
   java.util.Calendar cal 
= java.util.Calendar.getInstance();
   cal.add(
13);
   cal.add(
6-1);
   java.text.NumberFormat nf 
= new java.text.DecimalFormat("000");
   licenseNum 
= nf.format(Integer.valueOf(licenseNum));
   String verTime 
= new StringBuilder("-").append(
     
new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
     .append(
"0").toString();
   String type 
= "YE3MP-";
   String need 
= new StringBuilder(userId.substring(01)).append(type)
     .append(
"300").append(licenseNum).append(verTime).toString();
   String dx 
= new StringBuilder(need).append(LL).append(userId)
     .toString();
   
int suf = this.decode(dx);
   String code 
= new StringBuilder(need).append(String.valueOf(suf))
     .toString();
   
return this.change(code);
}
 
private int decode(String s) {
   
int i;
   
char[] ac;
   
int j;
   
int k;
   i 
= 0;
   ac 
= s.toCharArray();
   j 
= 0;
   k 
= ac.length;
   
while (j < k) {
    i 
= (31 * i) + ac[j];
    j
++;
   }
   
return Math.abs(i);
}
 
private String change(String s) {
   
byte[] abyte0;
   
char[] ac;
   
int i;
   
int k;
   
int j;
   abyte0 
= s.getBytes();
   ac 
= new char[s.length()];
   i 
= 0;
   k 
= abyte0.length;
   
while (i < k) {
    j 
= abyte0[i];
    
if ((j >= 48&& (j <= 57)) {
     j 
= (((j - 48+ 5% 10+ 48;
    } 
else if ((j >= 65&& (j <= 90)) {
     j 
= (((j - 65+ 13% 26+ 65;
    } 
else if ((j >= 97&& (j <= 122)) {
     j 
= (((j - 97+ 13% 26+ 97;
    }
    ac[i] 
= (char) j;
    i
++;
   }
   
return String.valueOf(ac);
}
 
public MyEclipseGen() {
   
super();
}
 
public static void main(String[] args) {
   
try {
    System.out.println(
"please input register name:");
    BufferedReader reader 
= new BufferedReader(new InputStreamReader(
      System.in));
    String userId 
= null;
    userId 
= reader.readLine();
    MyEclipseGen myeclipsegen 
= new MyEclipseGen();
    String res 
= myeclipsegen.getSerial(userId, "5");
    System.out.println(
"Serial:" + res);
    reader.readLine();
   } 
catch (IOException ex) {
   }
}
}

我计算出来的:oLR8ZC-855550-67595356781722504
posted @ 2008-12-18 09:22 蓝剑 阅读(2171) | 评论 (1)编辑 收藏
Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。

Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。
你可以在网上下载到最新的2.3试用版本,同时网站会发给你一个试用的license文件。既然是试用,
那么在使用上肯定有一定的限制。主要限制有3个:
    1.只能最多生成5张表的DAO;
    2.有时间限制;
    3.不能自己定制代码生成;

为了能够更好的试用这个软件,我得改改它,去掉这些限制。将firestorm.jar打开后,可以看到它使用了
混淆器进行代码保护,不同于大多数的混淆器生成的文件,它的class和package大部分都是以关键字来命名,
所以如果你用JAD之类的工具把它反编译后是不能再把它编译成功,编译器会提示出错误。

反编译后,找到几个有关注册的关键文件,发现它使用的是数字签名技术来做的保护,所以想逆向找出
注册码的计算方法是不可行的了,只能通过修改文件的方法来破解。通常我们是先反编译,然后再修改
反编译后生成的原文件,最后再重新编译。但是由于文件名和包名的关系我们无法进行编译,除非把它的
这些‘非法'的文件名和包名全部改成符合java语言规范的名称,由于类,包众多,互相调用也很
频繁,所以这种方法几乎不可能的。

另外一种方法就是使用softice之类的调试软件来破解,不过这个脱离JAVA的范畴,这里不做讨论。

还有一种方法可能很少有人用,就是先反编译得到原文件,然后找到关键的方法后修改它的字节码,
也就是class文件,这中方法往往需要你知道一些有关CLASS文件格式方面的知识(如果没有也不用担心),
有许多的处理字节码的工具可以帮助你,比较流行的这类工具主要有:apache.org的BCEL;
jboss.com的javassist;objectweb.org的asm。都是出身名门哈。这3个工具各有特点,
这次我选用javassist,因为它修改class文件最方便,甚至不需要懂得字节码和class文件格式。

让我们来看看具体步骤:


step1:
    下载并安装FIRESTORM。
step2:
    反编译jar文件,阅读代码,找到关键的方法。当然,我这里写出来,你就不用再麻烦了。(其实这步是最
    麻烦的)。
    找到com.codefutures.if.if文件中的方法
        public static boolean a(java.security.PublicKey publickey,
                byte abyte0[], byte abyte1[])
            throws java.security.NoSuchAlgorithmException,
            java.security.NoSuchProviderException,
            java.security.InvalidKeyException,
            java.security.SignatureException {
            java.security.Signature signature = java.security.Signature.getInstance("SHA1withDSA", "SUN");
            signature.initVerify(publickey);
            signature.update(abyte0);
            return signature.verify(abyte1);
        }

    这个方法是对公钥进行检验,修改的思路就是直接让他返回一个true.

step2:
    收到firestorm.license文件后不要急着安装,先修改如下:
        <custom-codegen>no</custom-codegen>
            改为
        <custom-codegen>yes</custom-codegen>

        <restriction>5</restriction>
            改为
        <restriction>none</restriction>

        <expiry-date>[日期]</expiry-date>
            改为
        <expiry-date>never</expiry-date>

    修改后放到firestorm的安装路径的license目录。

step3:
    修改com.codefutures.if.if的class文件.这里我们需要写一个小程序来完成实现:
        import javassist.ClassPool;
        import javassist.CtClass;
        import javassist.CtMethod;


        public class Test {
            
            public static void main(String[] args) throws Exception {
                ClassPool pool = ClassPool.getDefault();

                //设置目标类的路径,确保能够找到需要修改的类,这里我指向firestorm.jar
                //解包后的路径
                pool.insertClassPath("d:/work/firestorm/firestorm") ;    
                
                //获得要修改的类
                CtClass cc = pool.get("com.codefutures.if.if");
                //设置方法需要的参数
                CtClass[] param = new CtClass[3] ;                
                param[0] = pool.get("java.security.PublicKey") ;
                param[1] = pool.get("byte[]") ;
                param[2] = pool.get("byte[]") ;

                //得到方法
                CtMethod m = cc.getDeclaredMethod("a", param);
                //插入新的代码
                m.insertBefore("{return true ;}") ;
                //保存到文件里
                cc.writeFile() ;
            }
        }

    
    修改完后,你可以反编译修改过的的class文件,看看代码是否加入成功。

step4:
    将所有的class文件重新打包成firestorm.jar,然后替换
    [firestorm安装路径]/lib/firestorm.jar,再启动firestorm即可。
posted @ 2008-09-18 15:26 蓝剑 阅读(7347) | 评论 (0)编辑 收藏
随着在线人数的不断增加,WDA的附件每天增量很多,流量越来越大,从MRTG监控到,忙时达到10M,导致空间商限制了WDA的流量。
分析流量大的原因,主要是因为上传和下载附件占用了带宽,找了很多解决办法,终于用apache的bw_mod模块解决了。
bw_mod是for apache2的,首先到http://apache.ivn.cl/下载最新的bw_mod模块,目前是bw_mod v0.6。
   然后运行apxs -i -a -c bw_mod-0.6.c,apxs请用绝对路径。此命令会自动安装bw_mod,并在apache配置文件httpd.conf自动加入
LoadModule bw_module          modules/bw_mod-0.6.so
安装完成后,会在modules目录下生成bw_mod-0.6.so 文件。
如果安装过程没有出错的话,就可以开始进行设置了。
在httpd.conf中的LoadModule bw_module          modules/bw_mod-0.6.so   下面加入以下设置指令:
           BandWidthModule On    
#启动bw_mod模块
          BandWidth  all 0
          #总的带宽不用限制
          LargeFileLimit .rar 30 23000
#限制所有大于30K的后缀名为.rar的文件的速率为23000字节/秒,即23K/秒
          LargeFileLimit .mp3 30 23000
          LargeFileLimit .wav 30 23000
         LargeFileLimit .jpg 10 27000
         LargeFileLimit .gif 5 27000
         LargeFileLimit .zip 50 30000
         LargeFileLimit .sis 50 30000
         LargeFileLimit .exe 50 30000
       安装完毕后,网站速度有明显好转。
posted @ 2008-09-16 11:17 蓝剑 阅读(618) | 评论 (0)编辑 收藏
限制并发数
下载模块:

到官方网址: http://www.nowhere-land.org/programs/mod_vhost_limit/下载模块

http://www.nowhere-land.org/prog ... st_limit-0.4.tar.gz

安装
apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so

httpd.conf 加入:

LoadModule vhost_limit_module libexec/mod_vhost_limit.so
AddModule mod_vhost_limit.c

配置

MaxClients 150
ExtendedStatus On

NameVirtualHost *

<VIRTUALHOST * />
    ServerName       server1
    DocumentRoot     /some/where/1
    MaxVhostClients  100


<VIRTUALHOST * />
    ServerName       server2
    DocumentRoot     /some/where/2
    MaxVhostClients  30


<VIRTUALHOST * />
    ServerName       server3
    DocumentRoot     /some/where/3


其中: server1 被限制为 100 个并发线程数。 server2 被限制为 30 个并发线程数。 server3 没有被限制。

注:需 mod_status 的 ExtendedStatus On 支持!!

如超出限制的并发数在客户端就会出现503错误

----------------------------------------------------------------------------------------------

限制IP连接数

到这里下载模块 http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz

安装:
tar zxvf mod_limitipconn-0.04.tar.gz
cd mod_limitipconn-0.04
make APXS=/usr/local/apache/bin/apxs  ß-----这里要按你自己的路径设置
make install APXS=/usr/local/apache/bin/apxs ß-----这里要按你自己的路径设置

编辑httpd.conf
添加
全局变量:
< IfModule mod_limitipconn.c >
      < Location / >   # 所有虚拟主机的/目录
          MaxConnPerIP 3     # 每IP只允许3个并发连接
        NoIPLimit image/*  # 对图片不做IP限制
    < /Location >

< Location /mp3 >  # 所有主机的/mp3目录
MaxConnPerIP 1         # 每IP只允许一个连接请求   
OnlyIPLimit audio/mpeg video    # 该限制只对视频和音频格式的文件
    < /Location >
< /IfModule >



或者虚拟主机的:
< VirtualHost xx.xxx.xx.xx > ##ip 地址
ServerAdmin easy@phpv.net
DocumentRoot /home/easy
ServerName www.phpv.net
< IfModule mod_limitipconn.c >
    < Location / >   
MaxConnPerIP 5        
          NoIPLimit image/*      
    < /Location >
      < Location /mp3 >    # 所有主机的/mp3目录
MaxConnPerIP 2         # 每IP只允许一个连接请求   
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
      < /Location >
< /IfModule >
< /VirtualHost >



----------------------------------------------------------------------------------------------

限制带宽

下载模块 ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c
安装:
/usr/local/apache/bin/apxs -c ./mod_bandwidth.c -o /usr/local/apache/libexec/mod_bandwidth.so  



<-------以上/usr/local/apache请设置为你的路径

编辑httpd.conf
添加:
LoadModule bandwidth_module libexec/mod_bandwidth.so
AddModule mod_bandwidth.c

重启你的apache

相关文档

Global configuration directives :

    * BandWidthDataDir
      Syntax : BandWidthDataDir <directory>
      Default : "/tmp/apachebw"
      Context : server config

Sets the name of the root directory used by mod_bandwidth to store its internal temporary information. Don't forget to create the needed directories : <directory>/master and <directory>/link

    * BandWidthModule
      Syntax : BandWidthModule <On|Off>
      Default : Off
      Context : per server config

Enable or disable totaly the whole module. By default, the module is disable so it is safe to compile it in the server anyway.

PLEASE, NOTE THAT IF YOU SET A BANDWIDTH LIMIT INSIDE A VIRTUALHOST BLOCK, YOU ALSO __NEED__ TO PUT THE "BandWidthModule On" DIRECTIVE INSIDE THAT VIRTUALHOST BLOCK !

IF YOU SET BANDWIDTH LIMITS INSIDE DIRECTORY BLOCKS (OUTSIDE OF ANY VIRTUALHOST BLOCK), YOU ONLY NEED TO PUT THE "BandWidthModule On" DIRECTIVE ONCE, OUTSIDE OF ANY VIRTUALHOST OR DIRECTORY BLOCK.

    * BandWidthPulse
      Syntax : BandWidthPulse <microseconds>
      Default :
      Context : per server config

Change the algorithm used to calculate bandwidth and transmit data. In normal mode (old mode), the module try to transmit data in packets of 1KB. That mean that if the bandwidth available is of 512B, the module will transmit 1KB, wait 2 seconds, transmit another 1KB and so one.

Seting a value with "BandWidthPulse", will change the algorithm so that the server will always wait the same amount of time between sending packets but the size of the packets will change. The value is in microseconds. For example, if you set "BandWidthPulse 1000000" (1 sec) and the bandwidth available is of 512B, the sever will transmit 512B, wait 1 second, transmit 512B and so on.

The advantage is a smother flow of data. The disadvantage is a bigger overhead of data transmited for packet header. Setting too small a value (bellow 1/5 of a sec) is not realy useful and will put more load on the system and generate more traffic for packet header.

Note also that the operating system may do some buffering on it's own and so defeat the purpose of setting small values.

This may be very useful on especialy crowded network connection : In normal mode, several seconds may happen between the sending of a full packet. This may lead to timeout or people may believe that the connection is hanging. Seting a value of 1000000 (1 sec) would guarantee that some data are sent every seconds...
posted @ 2008-09-16 10:56 蓝剑 阅读(634) | 评论 (0)编辑 收藏
#
# 基于 NCSA 服务器的配置文件 由 Rob McCool 编写,龙子翻译
#
# Apache服务器主配置文件.  包括服务器指令的目录设置.
# 详见 <URL:http://www.apache.org/docs/>
#
# 请在理解用途的基础上阅读各指令。
#
# 再读取此文档后,服务器将继续搜索运行
# E:/Program Files/Apache Group/Apache/conf/srm.conf
# E:/Program Files/Apache Group/Apache/conf/access.conf
# 除非用ResourceConfig或AccessConfig覆盖这儿的标识
#
# 配置标识由三个基本部分组成:
#  1. 作为一个整体来控制Apache服务器进程的标识 (the 'global environment').
#  2. 用于定义主(默认)服务器参数的标识。
#     响应虚拟主机不能处理的请求。
#     同时也提供所有虚拟主机的设置值。
#  3. 虚拟主机的设置。在一个Apache服务器进程中配置不同的IP地址和主机名。
#
# 配置和日志文件名:指定服务器控制文件命名时,
# 以 "/" (或 "drive:/" for Win32)开始,服务器将使用这些绝对路径。
# 如果文件名不是以"/"开始的,预先考虑服务器根目录--
#  因此 "logs/foo.log",如果服务器根目录是"/usr/local/apache",
#  服务器将解释为 "/usr/local/apache/logs/foo.log".
#
# 注: 指定的文件名需要用"/"代替"""。
# (例, "c:/apache" 代替 "c:"apache").
# 如果省略了驱动器名,默认使用Apache.exe所在的驱动器盘符
# 建议指定盘符,以免混乱。
#
### 部分 1: 全局环境
#
# 本部分的表示将影响所有Apache的操作
# 例如,所能处理的并发请求数或配置文件地址
#
#
# ServerType 可取值 inetd 或 standalone.  Inetd 只适用于Unix平台
#
ServerType standalone
#
# ServerRoot: 目录树的根结点。服务器配置、出错信息、日志文件都保存在根目录下。
#
# 不要再目录末尾加"/"
#
ServerRoot "C:/Program Files/Apache Group/Apache"
#
# PidFile: 服务器用于记录启动时进程ID的文件。
#
PidFile logs/httpd.pid
#
# ScoreBoardFile: 用于保存内部服务器进程信息的文件。
# 并非必须。 但是如果指定了(此文件当运行Apache时生成)
# 那么必须确保没有两个Apache进程共享同一个scoreboard文件。
#
ScoreBoardFile logs/apache_runtime_status
#
# 在标准配置下,服务器将顺序读取 httpd.conf(此文件可通过命令行中-f参数指定),
# srm.conf 和 access.conf。
# 目前后两个文件是空的。为了简单起见,建议将所有的标识放在一个文件中。 
# 以下两条注释的标识,是默认设置。
# 要让服务器忽略这些文件可以用 "/dev/null" (for Unix)
# 或"nul" (for Win32) 作为参数。
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf
#
# Timeout: 接受和发送timeout的时间
#
Timeout 300
#
# KeepAlive: 是否允许保持连接(每个连接有多个请求)
# "Off" -无效
#
KeepAlive On
#
# MaxKeepAliveRequests: 每个连接的最大请求数。
# 设置为0表示无限制
# 建议设置较高的值,以获得最好的性能。
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: 同一连接同一客户端两个请求之间的等待时间。
#
KeepAliveTimeout 15
#
# 在Win32下,Apache每次产生一个子进程来处理请求。
# 如果这个进程死了,会自动产生另一个子进程。
# 所有的进入请求在子进程中多线程处理。
# 以下两个标识控制进程的运行
#
#
# MaxRequestsPerChild: 每个子进程死亡之前最大请求数
# 如果超过这个请求数,子程序会自动退出,避免延期使用导致内存溢出或其他问题。
# 大部分系统,并不需要此设置,
# 但是部分,象Solaris,确实值得注意。
# 对Win32, 可设置为0 (无限制)
# 除非有另外的考虑。
#
# 注: 此值不包括在每个连接初始化请求后,"keptalive"请求
#       例如, 如果一个子进程处理一个初始化请求和10个后续"keptalive"请求,
#       在这个限制下,只会记为一个请求。
#
MaxRequestsPerChild 0
#
# ThreadsPerChild: 服务器所允许的并发线程数。
# 此值的设置取决于服务器的响应能力(约多的请求在同一时间激活,则每个请求的处理时间越慢)
# 和服务器所允许消耗的系统资源。
#
ThreadsPerChild 50
#
# Listen: 允许将Apache绑顶到指定的IP地址和端口,作为默认值的辅助选项。
# 参见 <VirtualHost>
#
#Listen 3000
#Listen 12.34.56.78:80
#
# BindAddress: 通过此选项可支持虚拟主机。
# 此标识用于告诉服务器监听哪个IP地址。
# 包括:"*", IP地址, 或域名.
# 参见 <VirtualHost> 和 Listen directives.
#
BindAddress 166.111.178.144
#
# Apache模块编译成标准的Windows结构。
#
# 以下模块绑定到标准的Apache二进制windows分布。
# 要修改标准操作,取消以下行的注释并且修改指定模块列表。
#
# 警告:这是高级选项。可能导致服务器崩溃。
# 没有专家的指导,不要轻易修改。
#
#ClearModuleList
#AddModule mod_so.c mod_mime.c mod_access.c mod_auth.c mod_negotiation.c
#AddModule mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c mod_userdir.c
#AddModule mod_alias.c mod_env.c mod_log_config.c mod_asis.c mod_imap.c
#AddModule mod_actions.c mod_setenvif.c mod_isapi.c
#
# 动态共享对象(Dynamic Shared Object,DSO)
#
# 要使用基于DSO的功能模块,需要替换此处相应的
#  `LoadModule' 行。这样在使用之前这些包含的标识都将生效。
# 有关DSO及至的详细资料请看Apache1.3版中的README.DSOSO。
# 运行"apche -l"将列表显示Apache内奸的模块(类似标准的连接已经生效)
#
# 注:模块载入的顺序很重要。没有专家的建议,不要修改以下的顺序。
#
#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll
#LoadModule dbm_auth_module modules/ApacheModuleAuthDBM.dll
#LoadModule digest_auth_module modules/ApacheModuleAuthDigest.dll
#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll
#LoadModule digest_module modules/ApacheModuleDigest.dll
#LoadModule expires_module modules/ApacheModuleExpires.dll
#LoadModule headers_module modules/ApacheModuleHeaders.dll
#LoadModule proxy_module modules/ApacheModuleProxy.dll
#LoadModule rewrite_module modules/ApacheModuleRewrite.dll
#LoadModule speling_module modules/ApacheModuleSpeling.dll
#LoadModule info_module modules/ApacheModuleInfo.dll
#LoadModule status_module modules/ApacheModuleStatus.dll
#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll
#
# ExtendedStatus 在服务器状态句柄被呼叫时控制是产生"完整"的状态信息(ExtendedStatus On)
# 还是仅返回基本信息(ExtendedStatus Off)
# 默认是:Off
#
#ExtendedStatus On
### 部分 2: 主服务器配置
#
# 此部分的标识用于主服务器所有的设置值,
# 响应任何<VirtualHost>定义不处理的请求
# 这些值同时给你稍后在此文件中定义的<VirtualHost>提供默认值。
#
# 所有的标识可能会在<VirtualHost>中出现。
# 对应的默认值会被虚拟主机重新定义覆盖。
#
#
# Port: Standalone服务器监听的端口。 
# 在Apache能够监听指定端口前,需要在防火墙中进行设置。
# 其它运行httpd的服务器也可能影响此端口。  Disable
# 如果遇到问题,请关闭所有的防火墙、安全保护和其他的服务。
# Windos NT的"NETSTAT -a"指令会有助于问题的分析。
#
Port 80
#
# ServerAdmin: 你的地址。如果服务器有任何问题将发信到这个地址。
# 这个地址会在服务器产生的某些页面中出现,例如,错误报告。
#
ServerAdmin chenyl98@mails.tsinghua.edu.cn
#
# ServerName 允许设置主机名。如果与程序获得的不同,主机名将返回客户端。
# (例如,用"www"代替主机真实的名字)
#
# 注: 主机名不能随便指定。必须是你的机器有效的DNS名称。否则无法正常工作。
# 如果不能理解,倾向你的网络管理员询问。
# 如果你的主机没有注册DNS名,可在此输入IP地址。
# 此时必须用IP地址来访问。(如, http://123.45.67.89/)
# 这样扔可以完成重新定向的工作。
#
# 127.0.0.1 是TCP/IP的本地环路地址, 通常命名为localhost.
# 机器默认此地置为本身。 如果只是使用Apache来进行本地测试和开发,
# 可使用127.0.0.1 作为服务器名.
#
#ServerName new.host.name

#
# DocumentRoot: 放置服务文档的目录。
# 默认状态下,所有的请求都以这个目录为基础。
# 但是直接符号连接和别名可用于指向其他位置。
#
DocumentRoot "D:/www_root"
#
# Apache访问的每个目录可设置相关的服务和特性是允许或(和)不允许。
# (同样影响其子目录)
#
# 首先,设置"default"地址只有最基本的权限。
#
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
#
# 注意从现在开始必须制定开启特殊的权限。
# 这样就不会产生意想不到的结果。
# 请仔细确认。
#
#
# 这个地址应与DocumentRoot保持一致
#
<Directory "D:/www_root">
#
# 此值可是: "None", "All", 或下列的组合: "Indexes",
# "Includes", "FollowSymLinks", "ExecCGI", 或 "MultiViews".
#
# 注意"MultiViews"必须明确指定--- "Options All"不包括此特性。
#
    Options Indexes FollowSymLinks MultiViews
#
# 此项控制目录中哪些.htaccess文件可覆盖。
# 允许值: "All"或者以下项的组合:"Options", "FileInfo",
# "AuthConfig", "Limit"
#
    AllowOverride None
#
# 控制哪些用户可从此服务器获得资料。
#
    Order allow,deny
    Allow from all
</Directory>
#
# UserDir: 当请求~user时,追加到用户主目录的路径地址。
#
# 在Win32下,并不要求指定为用户登陆的主目录。
# 因此可使用以下的格式。
# 详细参照文档UserDir
#
<IfModule mod_userdir.c>
    UserDir "f:/homepages/"
</IfModule>
#
# 控制访问UserDir目录.  The following is an example
# 以下是一个站点的例子,权限限制为只读。
#
#<Directory "E:/Program Files/Apache Group/Apache/users">
#    AllowOverride FileInfo AuthConfig Limit
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    <Limit GET POST OPTIONS PROPFIND>
#        Order allow,deny
#        Allow from all
#    </Limit>
#    <LimitExcept GET POST OPTIONS PROPFIND>
#        Order deny,allow
#        Deny from all
#    </LimitExcept>
#</Directory>
#
# DirectoryIndex: 预设的HTML目录索引文件名。
# 用空格来分隔多个文件名。
#
<IfModule mod_dir.c>
    DirectoryIndex index.html
</IfModule>
#
# AccessFileName: 每个目录中用于控制访问信息的文件名。
#
AccessFileName .htaccess
#
# 以下行防止客户端可访问 .htaccess 文件。
# 因为 .htaccess文件通常包含授权信息,
# 处于安全的考虑不允许访问。
# 如果想让访客看到.htaccess文件的内容,
# 可将这些行注释。
# 如果修改了上面的AccessFileName,
# 请在此进行相应的修改。
#
# 同时,一般会用类似.htpasswd的文件保存密码。
# 这些文件同样可以得到保护。
#
<Files ~ "^".ht">
    Order allow,deny
    Deny from all
</Files>
#
# CacheNegotiatedDocs: 默认下,Apache对每个文档发送"Pragma: no-cache"
# 这将要求代理服务器不缓存此文档。
# 取消下列行的可取消这个属性,这样代理服务器将缓存这些文档。
#
#CacheNegotiatedDocs
#
# UseCanonicalName:  (1.3新增)  当此设置为on时,
# 无论何时Apache需要构建一个自引用的URL(指向响应来源服务器),
# 它将用ServerName和Port来构建一个规范的格式。
# 当此设置为off时,Apache将使用客户端提供的"主机名:端口"
# 这将同时影响CGI脚本中的SERVER_NAME和SERVER_PORT
#
UseCanonicalName On
#
# TypesConfig 记录媒体类型(mime.types)文件或类似的东东放置的位置
#
<IfModule mod_mime.c>
    TypesConfig conf/mime.types
</IfModule>
#
# DefaultType 是服务器处理未确认类型的文件,如为止的扩展名,的默认类型。
# 如果你的服务器上主要包含的是文本或HTML文档,"text/plain"是较好的设置
# 如果服务器上主要包含二进制文件,如应用程序或图片,
# 最好设置成"application/octet-stream"防止浏览器将二进制文件以文本的方式显示。
#
DefaultType text/plain
#
# mod_mime_magic模块允许服务器使用文件自身的不同标识来确定文件类型。
# MIMEMagicFile指示模块文件标识的定义所在的位置。
# mod_mime_magic不是默认服务器的一部分。
# (必须自行用LoadModule来追加 [见'全局环境'部分的 DSO 章节],
# 或者在编译服务器时包含mod_mime_magic部分)
# 包含在 <IfModule> 中.
# 就是说,如果该模块是服务器的一部分,MIMEMagicFile标识将执行。
#
<IfModule mod_mime_magic.c>
    MIMEMagicFile conf/magic
</IfModule>
#
# HostnameLookups: 注册客户端的机器名或IP地址。
# 例如: www.apache.org (on) 或 204.62.129.132 (off).
# 默认为off,因为对于网络来说,最好让人们有意识的设置为on,
# 因为开启此功能意味着每个客户请求将导致至少向name服务器发送一个lookup请求
#
HostnameLookups Off
#
# ErrorLog: 错误记录文件的地址
# 如果不在<VirtualHost>内指定ErrorLog
# 改虚拟主机的错误心细将记录到此处。
# 如果在<VirtualHost>中明确指定了错误记录文件,
# 则错误将记录在那儿而不是这儿。
#
ErrorLog logs/error.log
#
# LogLevel: 控制记录在error.log中信息的个数.
# 可能的值:debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
#
# 以下标识定义CustomLog标识使用的格式。(见下)
#
LogFormat "%h %l %u %t ""%r"" %>s %b ""%{Referer}i"" ""%{User-Agent}i""" combined
LogFormat "%h %l %u %t ""%r"" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#
# 访问记录的位置和格式 (功用的记录文件格式).
# 如果不在<VirtualHost>中定义记录文件,
# 那些访问记录就将保存在这儿。  Contrariwise, if you *do*
# 反之,如果指定了记录文件,那么访问记录将记录在那儿而不是这个文件中。
#
CustomLog logs/access.log common
#
# 如果希望使用代理和参考的记录文件, 取消以下标识的注释符
#
#CustomLog logs/referer.log referer
#CustomLog logs/agent.log agent
#
# 如果想在一个文件中记录访问、代理、参考信息(复合的记录格式)
# 可使用以下标识
#
#CustomLog logs/access.log combined
#
# 在服务器产生的页面(如错误文档信息,FTP目录列表等等,不包括CGI产生的文档)中
# 增加一条服务器版本和虚拟主机名的信息。
# 设置为"EMail"将包含mailto: ServerAdmin的连接.
# 可选值:  On | Off | EMail
#
ServerSignature On
#
# 默认下,Apache用工作行解析所有CGI脚本
# 此注释行(脚本的第一行)包括'#'和'!'后面跟着执行特殊脚本的程序路径,
# 对perl脚本来说是C:"Program Files"Perl目录中的perl.exe。
# 工作行如下:
   #!c:/program files/perl/perl
# 注意真实的工作行不能有缩进,必须是文件的第一行。
# 当然,CGI进程必须通过适当的ScriptAlias或ExecCGI选项标识来启动。
#
# 然而,Windows下的Apache即允许以上的Unix方式,也可以通过注册表的形式。
# 用注册表执行文件的方法同在Windows资源管理器中双击运行的注册方法相同。
# 此脚本操作可在Windows资源管理器的"查看"菜单中设置。
# "文件夹选项",然后查看"文件类型"。点击编辑按钮。
# 修改操作属性。Apache 1.3会尝试执行‘Open'操作,
# 如果失败则会尝试工作行
# 这个属性在Apache release 2.0中会有改变.
#
# 每个机制都有自身特定的安全弱点,这样可能导致别人运行你不希望调用的程序。
# 最佳的解决方案还在讨论中。
#
# 要是这个Windows的特殊属性生效 (同时会是Unix属性无效)
# 取消下列标识的注释符。
#
#ScriptInterpreterSource registry
#
# 上面的标识可在<Directory>块或.htaccess文件中单独替换。
# 可选择'registry' (Windows behavior)或 'script'
# (Unix behavior) option, 将覆盖服务器的默认值。
#
#
# Aliases: 可无限制的追加别名。格式如下:
# Alias 假名 真名
#
<IfModule mod_alias.c>
    #
    # 注意如果假名中包含'/',服务器会在当前URL中发出请求。
    # 因此"/icons"不能用于别名
    # 必须用 "/icons/"..
    #
    Alias /icons/ "C:/Program Files/Apache Group/Apache/icons/"
    <Directory "C:/Program Files/Apache Group/Apache/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    #
    # ScriptAlias: 控制哪个目录包含服务器脚本。
    # ScriptAlias本质行和Aliases一样。, except that
    # 区别在于真名目录中的文档被看作是一个应用程序。
    # 请求时由服务器运行而不是发往客户端。
    # "/"符号的规则同
    # Alias相同.
    #
    ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"
    #
    # "C:/Program Files/Apache Group/Apache/cgi-bin" 可修改为任何放置CGI脚本的目录
    #
    <Directory "C:/Program Files/Apache Group/Apache/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
</IfModule>
# 别名结束
#php脚本说明
ScriptAlias /php/ "d:/php/"
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
Action application/x-httpd-php "/php/php.exe"
#php脚本说明结束
#
# Redirect 允许告诉客户端服务器上曾经有的文档,但是现在不存在了。
# 并且可以告诉客户端到哪儿去寻找。
# 格式: Redirect old-URL new-URL
#
#
# 控制服务器目录列表显示的标识
#
<IfModule mod_autoindex.c>
    #
    # FancyIndexing标识是使用特定的目录检索还是标准的(standard)
    #
    IndexOptions FancyIndexing
    #
    # AddIcon*表明不同文件或扩展名显示的图标。
    # 这些图标只在特定检索状态下显示。
    #
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*
    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core
    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^
    #
    # DefaultIcon 用于为制定图标的文件所显示的图标。
    #
    DefaultIcon /icons/unknown.gif
    #
    # AddDescription在服务器生成的检索的某个文件后追加小段说明。
    # 此项只在设置为FancyIndexed时有效
    # 格式:AddDescription "描述" 文件名
    #
    #AddDescription "GZIP compressed document" .gz
    #AddDescription "tar archive" .tar
    #AddDescription "GZIP compressed tar archive" .tgz
    #
    # ReadmeName是服务器默认的README文件。
    # 并且会追加到目录列表的最后。
    #
    # HeaderName 是目录中需要预先显示内容的文件名。
    #
    # 如果MultiViews在选项中,作为结果,服务器将先找name.html,
    # 如果存在就包含它。如果name.html不存在,
    # 服务器会继续寻找name.txt。如果存在就作为纯文本包含进来。
    #
    ReadmeName README
    HeaderName HEADER
    #
    # IndexIgnore是一系列的文件名。目录索引将忽略这些文件并且不包含在列表中。
    # 允许使用通配符。
    #
    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
</IfModule>
# indexing标识结束
#
# 文件类型
#
<IfModule mod_mime.c>
    #
    # AddEncoding 可用于特殊浏览器(Mosaic/X 2.1+)快速传输压缩信息。
    # 注:并不是所有的服务器都支持。
    # 除了名字相似,以下Add*标识对上面的FancyIndexing定制标识无影响。
    #
    AddEncoding x-compress Z
    AddEncoding x-gzip gz tgz
    #
    # AddLanguage用于指定文档的语言。
    # 可以使用content标签指定每个文件的语言。
    #
    # 注 1: 后缀不必与所用语言的关键字相同。
    #   --- 波兰语(Polish,标准代码为pl)的文档可以用
    #  "AddLanguage pl .po" 来避免与perl脚本文件混淆。
    #
    # 注 2: 以下例子表明两个字母的语言缩写和两个字母的国家缩写并不一定相同。
    # E.g. 'Danmark/dk' 对比 'Danish/da'.
    #
    # 注 3: 其中'ltz'使用了三个字符,与RFC的规定不同。
    # 但是这个问题正在修订中,并且重新清理RFC1766
    #
    # 丹麦Danish (da) - 荷兰Dutch (nl) - 英国English (en) - 爱萨尼亚Estonian (ee)
    # 法国French (fr) - 德国German (de) - 现代希腊文Greek-Modern (el)
    # 意大利Italian (it) - 朝鲜Korean (kr) - 挪威Norwegian (no)
    # 葡萄牙Portuguese (pt) - 卢森堡Luxembourgeois* (ltz)
    # 西班牙Spanish (es) - 瑞典Swedish (sv) - 加泰罗尼亚Catalan (ca) - 捷克Czech(cz)
    # 波兰Polish (pl) - 巴西Brazilian Portuguese (pt-br) - 日本Japanese (ja)
    # 俄国Russian (ru)
    #
    AddLanguage da .dk
    AddLanguage nl .nl
    AddLanguage en .en
    AddLanguage et .ee
    AddLanguage fr .fr
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage he .he
    AddCharset ISO-8859-8 .iso8859-8
    AddLanguage it .it
    AddLanguage ja .ja
    AddCharset ISO-2022-JP .jis
    AddLanguage kr .kr
    AddCharset ISO-2022-KR .iso-kr
    AddLanguage no .no
    AddLanguage pl .po
    AddCharset ISO-8859-2 .iso-pl
    AddLanguage pt .pt
    AddLanguage pt-br .pt-br
    AddLanguage ltz .lu
    AddLanguage ca .ca
    AddLanguage es .es
    AddLanguage sv .se
    AddLanguage cz .cz
    AddLanguage ru .ru
    AddLanguage tw .tw
    AddCharset Big5         .Big5    .big5
    AddCharset WINDOWS-1251 .cp-1251
    AddCharset CP866        .cp866
    AddCharset ISO-8859-5   .iso-ru
    AddCharset KOI8-R       .koi8-r
    AddCharset UCS-2        .ucs2
    AddCharset UCS-4        .ucs4
    AddCharset UTF-8        .utf8
    # LanguagePriority 可设置语言的优先级。
    #
    # 优先级降序排列
    # 在此处按照字母顺序,可自行修改
    #
    <IfModule mod_negotiation.c>
        LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
    </IfModule>
    #
    # AddType 可临时改变mime.types或者指定特殊文件的格式。
    #
    # 例如:PHP 3.x 模块 (非Apache标准配件,参见http://www.php.net)可用下面格式定义:
    #
    #AddType application/x-httpd-php3 .php3
    #AddType application/x-httpd-php3-source .phps
    #
    # PHP 4.x, 使用:
    #
    #AddType application/x-httpd-php .php
    #AddType application/x-httpd-php-source .phps
    AddType application/x-tar .tgz
    #
    # AddHandler 可将特定文件扩展名映射到处理方法上。
    # 与文件类型无关。此特性可内建到服务器中或者追加在操作指令中(见下)
    #
    # 如果希望用服务器端应用或ScriptAliased外的CGI,取消以下行的注释符
    #
    # 用CGI脚本:
    #
    #AddHandler cgi-script .cgi
    #
    # 用服务器解析的HTML文档
    #
    #AddType text/html .shtml
    #AddHandler server-parsed .shtml
    #
    # 取消以下注释符可激活Apache的send-asis HTTP file特性
    #
    #AddHandler send-as-is asis
    #
    # 如果使用服务器端解析的图像定位文件,使用以下标识:
    #
    #AddHandler imap-file map
    #
    # 要激活type maps使用:
    #
    #AddHandler type-map var
</IfModule>
# 文档类型说明结束
#
# Action 定义在文件匹配时执行相应的脚本。
# 可简化常用CGI文件的调用。
# 格式: Action media/type /cgi-script/location
# 格式: Action handler-name /cgi-script/location
#
#
# MetaDir: 指定保存meta信息文件的目录。
# 这些文件包含附加的HTTP头,在发送文档是一并发送。
#
#MetaDir .web
#
# MetaSuffix: 指定包含meta信息的文件的后缀。
#
#MetaSuffix .meta
#
# 可定制的错误响应(Apache类型)
#  共三种风格:
#
#    1) 纯文本
#ErrorDocument 500 "The server made a boo boo.
#  注: 第一个"号用于表示是文本,实际不输出
#
#    2) 本地重定向
#ErrorDocument 404 /missing.html
#  to redirect to local URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#  注:可重定向到任何一个服务器端的脚本或文档
#
#    3) 外部重定向
#ErrorDocument 402 http://some.other_server.com/subscription_info.html
#  注: 大部分与初始请求关联的环境变量对这样的脚本无效。
#
#
# 基于浏览器的定制操作
#
<IfModule mod_setenvif.c>
    #
    # 以下标识修改普通的HTTP响应操作。
    # 第一个标识针对Netscape2.x和其他无此功能的浏览器取消保持激活状态的功能
    # 这些浏览器在执行这些功能时会出错。
    # 第二个标识针对IE4.0b2设置。其中有一条不完整的HTTP/1.1指令
    # 在301或302(重定向)响应时不能正确的保持激活状态
    #
    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4".0b2;" nokeepalive downgrade-1.0 force-response-1.0
    #
    # 下面的标识通过不产生基本的1.1响应取消对违反HTTP/1.0标准的浏览器的响应。
    #
    BrowserMatch "RealPlayer 4".0" force-response-1.0
    BrowserMatch "Java/1".0" force-response-1.0
    BrowserMatch "JDK/1".0" force-response-1.0
</IfModule>
# 浏览器定制标识结束
#
# 允许使用URL"http://servername/server-status"的形式查看服务器状态报告
# 修改 ".your_domain.com"来匹配相应的域名以激活此功能
#
#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#</Location>
#
# 允许使用URL"://servername/server-info"(要求加载mod_info.c),
# 来远程察看服务器配置报告。
# 修改 ".your_domain.com"来匹配相应的域名以激活此功能
#
#<Location /server-info>
#    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#</Location>
#
# 据报有人试图利用一个老的1.1漏洞。
# 这个漏洞与CGI脚本在Apache服务器上分布有关。
# 通过取消下面几行的注释符,可以将此类攻击记录转移到phf.apache.org上的记录脚本上。
# 或者也可以利用脚本scriptsupport/phf_abuse_log.cgi记录在本地服务器上。
#
#<Location /cgi-bin/phf*>
#    Deny from all
#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#</Location>
#
# 代理服务器标识。取消下列行的注释符可激活代理服务器。
#
#<IfModule mod_proxy.c>
#    ProxyRequests On
#    <Directory proxy:*>
#        Order deny,allow
#        Deny from all
#        Allow from .your_domain.com
#    </Directory>
    #
    # 激活/取消处理HTTP/1.1 "Via:" 报头
    # ("Full":加入服务器版本; "Block":取消所有外发的Via: 报头)
    # 可设置值: Off | On | Full | Block
    #
#    ProxyVia On
    #
    # 可修改下列各行并取消注释符来激活缓存。
    # (没有CacheRoot标识就不使用缓存)
    #
#    CacheRoot "E:/Program Files/Apache Group/Apache/proxy"
#    CacheSize 5
#    CacheGcInterval 4
#    CacheMaxExpire 24
#    CacheLastModifiedFactor 0.1
#    CacheDefaultExpire 1
#    NoCache a_domain.com another_domain.edu joes.garage_sale.com
#</IfModule>
# 代理标识结束
### 部分 3: 虚拟主机
#
# 虚拟主机: 如果希望在一台服务器上实现多个域名和主机名的服务,
# 可设置VirtualHost来实现。Most configurations
# 大部分的设置使用基于名称的虚拟主机,这样服务器就不必为IP地址操心。
# 这些用星号在下面的标识中标出。
#
# 在试图设置虚拟主机前
# 请阅读<URL:http://www.apache.org/docs/vhosts/>中的文档。
# 以了解细节问题。
#
# 可用命令行参数 '-S'来确认虚拟主机的设置。
#
#
# 使用基于名称的虚拟主机
#
#NameVirtualHost *
#
# 虚拟主机实例:
# 几乎所有的Apache标识都可用于虚拟主机内。
# 第一个VirtualHost部分用于申请一个无重复的服务器名。
#
#<VirtualHost *>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
posted @ 2008-09-16 10:53 蓝剑 阅读(24504) | 评论 (1)编辑 收藏
此模块适用于提供文件下载的网站,限制文件下载速度。
apache2必须以DSO模式安装
下载bw_mod-0.6.gz
Http://apache.ivn.cl
Bandwidth Module
Module homepage at Http://apache.ivn.cl

下载bw_mod-0.6.gz
#tar zxvf bw_mod-0.6.gz
#cd bw_mod-0.6
#apxs -i -a -c bw_mod-0.6.c
or
#apxs2 -i -a -c bw_mod-0.6.c
配置 (目录只看明白这一种)其它方法大家有空说一下。
例如限制soft目录下的文件下载速度,修改httpd.conf
<Directory "/var/www/html/soft">;
BandWidthModule On
BandWidth all 30720
</Directory>;

BandWidthModule On为启用带宽限制功能。
BandWidth all 30720第一个参数"all"为任何链接来源,第二个参数"30720"为限制带宽为30KB。

详细说明见bw_mod-0.6.txt

绑定宽度模块(ON/OFF)(似乎翻译成限制带宽更好)
为使该模块工作你需要设置为ON。缺省情况下模块是不能工作的。也将不限制任何事情,
例如“BANDWIDTHMODULE ON

限制带宽查错[ON/OFF]
(缺省为OFF)当使其能工作时LOG将输出大量数据块到错误LOG,这些数据用于差错目的,并且不是经常需要的,如果你很好奇你可以使其工作,但是注意这将使你的LOG增大很多,
例如:BANDWIDTHDEBUG ON

FORCEBANDWIDTHMODULE(ON|OFF)
缺省情况下。这一模块将捕获每一请求。这样做的目的是更容易配置,如果你禁止了这一功能,你将不得不手工添加输出过滤器,如果你只想让某些需求被BW模块处理这样是有用的。
例如:FORCEBANDWIDTHMODULE OFF
ADD OUTPUTFILTERBYTYPE BW-MOD TEXT/HTML TEXT/PLAIN

BANDWIDTH[FROM][BYTES/S]
这个命令有两个参数。FROM是连接数据源,它可以是一个完全的主机,域的一部分,一个IP地址,一个网关(如192。168。0。0/24或192。168。0。0/255。255。255。0)或者全部。
第二个参数指明源所能达到的总速度,如果速度为0,将不限制速度。
例如:BANDWIDTH LOCALHOST 10240
BANDWIDTH 192。168。218。5 0

MINBANDWIDTH[FROM][BYTES/S]
这一命令有两个参数,FROM是连接数据源,它可以是一个完全的主机,域的一部分,一个IP地址,一个网关(如192。168。0。0/24或192。168。0。0/255。255。255。0)或者全部。
第二个参数指明每一客户端所能拥有的最小速度,这是什么意思呢,如果你有一个总共100KBYTES的速度,并且你设置MINBANDWIDTH值为50,那么不管你有多少个客户,所有的客户都将有最小50K的下载速度,
如果速度设置为0,你将使用缺省最小速度(256BYTES/S)
还有一个特殊的值是-1,这一值意味着每一客户将有一个由BANDWIDTH决定的最高速度,请看例子:
BANDWIDTH ALL 102400
MINBANDWIDTH ALL 50000
上例将使第一个客户有一个最高100K的速度。如果更多的客户连接速度将被相应分配但是每一客户将有至少50K的速度(即使你有50个客户)。
BANDWIDTH ALL 50000
MINBANDWIDTH ALL -1
上例是每一客户有50K的最高速度。

LARGEFILELIMIT[TYPE][MINIMUM SIZE][BYTES/S]
TYPE。是是一个文件的后缀部分。或者使用*代表所有类型文件,你可以使用TGZ只匹配TAR-CAMPRESSED文件,。匹配影音文件,或者*匹配所有类型文件。
MINIMUM SIZE,是要匹配文件的大小(用KBYTES表示),这一方法你可以用于一个可能堵塞你带宽的巨大的影音文件。
最后一个参数不言自明:允许的速度
例如:LARGEFILELIMIT 。AVI 500 10240
这将限制一个大于(等于)500KB的影音文件以10KB/S的速度传送。

-BANDWIDTHPACKET[SIZE]
大概你根本用不上这个,它的缺省值为8192,几乎对任何速度都是合适的,
SIZE的大小必须在1024和131072之间,一个过小的包将引起最大速度减慢,模块将用更多的时间分割文件,如果你使用过大的值,模块将调整为更低的速度。

-BANDWIDTHERROR[ERROR]
用 于传送个性化错误代码。缺省情况下,当达到最大连接时,模块将发布一个503 HTTP-SERVICE-UNAVAILABLE代码,对一些用户来说,收到错误信息是令人厌烦的。也不知道是哪里出错。你可以使用一个 errordocument指明网页出现503错误是你处于过重的连接负荷,但是有时候503并不由模块发布。
所以。你可以用此设置在达到最大连接时返回错误代码。你可以使用300到599之间的代码,请注意,一些错误代码已经被使用。所以在使用任何数字之前请查阅一下代码列表(在GOOGLE中搜寻一下HTTP ERROR)
当测试时候。我曾经使用过错误代码510。这是已经被定义的代码
例如:个性化错误页
ERRORDOCUMENT 510/ERRORS/MAXEONEXCEEDED。HTML
BANDWIDTHERROR 510
注意:有时候。个性化页不显示,我不能肯定问题所在。但是大多数情况下。它是由于被超过1024BYTES的网页固定了。无论如何。如果你需要使用ErrorDocument的帮助,参考APACHE文档

-MAXCONNECTION[FROM][MAX]
有两个参数。FROM是连接数据源,它可以是一个完全的主机,域的一部分,一个IP地址,一个网关(如192。168。0。0/24或192。168。0。0/255。255。255。0)或者全部。
第二个参数是允许连接到源的最大连接数,任何超过最大连接数的连接将收到 503 Service Temporarily Unavailable
你需要对相同的源使用BANDWIDTH限制。不需要设置最低连接限制。你可以使用不限制设置。你可能奇怪为什么。因为我用相同的存储空间进行BANDWIDTH限制和计算连接数
,所以我可以把存储空间节省下来。如果你不设置BANDWIDTH于同一源。MAXCONNECTION将被忽略。
例如: BandWidth all 0
MaxConnection all 20
or
BandWidth all 0
BandWidth 192.168.0.0/24 10240
MaxConnection all 20
MaxConnection 192.168.0.0/24 5
请记住每一速度很大程度上依赖于你的连接,如果你没有连接你不能得到更高的速度。
记住如果你没有遵循指示并得到了莫名其妙的结果,请在发EMAIL给我之前重新检查你的配置。

FAQ
(无特别命令)
1 为什么使用BW—MOD
如果你要限制一个站点所能使用 的最大速度或者限制每站点允许的最大连接。或者只是实验MOD
一些人告诉我。他们首先使用它来阻止小站点提供影音图片或其他内容时堵塞他们所有带宽。
2我应该怎么做
首先。阅读文档。如果你不能使其工作。或者你想询问更多特性。请访问主页。并且提交请求。集注阅读文档和FAQ。如果请求已经提交。我将马上删除副本。

3(略)
4 它是怎么工作的
这个模块设置一个你设置的配制所占有的共享内存。在这一空间它也存储当前使用的信息的计数(象当前连接,使用的BW,时间。发送的字节等)
当你设置了一个BW限制。这个模块将进行数据分割。并且分段传送数据。在每段之间有一个小的延迟。这个延迟将被调整以在每一秒至少传送一段数据
posted @ 2008-09-16 10:43 蓝剑 阅读(409) | 评论 (0)编辑 收藏
[伊达原创] 在APACHE环境下配置下载服务器
 
具体配置如下
 
DocumentRoot "/downfile"
BandWidthModule On
ForceBandWidthModule On
<Location />
 MaxConnPerIP 1
</Location>
<Directory />
    Options FollowSymLinks
    AllowOverride None
    BandWidth    all 40960000
</Directory>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://download.92wy.com.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://down.92wy.com.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://games.shangdu.com.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://game.shangdu.com.*$ [NC]
RewriteRule .*$ http://download.92wy.com/err.asp [R,NC]
<Directory "/downfile">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
 
BandWidth    all 40960000  其实单位是字节,字面上意思是限速40兆,其实下载速率只有100K++ ,测试环境是晚上9:30-10:20 和早上12:00---2:40 这就奇怪了,难道是单位搞错了? 我根据限速的不同做了一个记录进行对比。
 
首先说明的是测试的时候,系统APACHE进程数在500左右~
第一次限速 2048000 2M的理论速度 在客户端下载的时候网际快车成波浪号呈现,速度最多是5k-0k-5k..........
第二次限速 20480000 大胆的设置成20M 看看实际下载速度能有多少,等服务重启以后再测试速度达到56k-60k左右了
第三次限速 是根据前两次设置的速率来改的,将速度限制成为40960000 40M,在进程数达到500左右的时候,内存的消耗达到正常,cache数值没有那么高了,只有50M左右。对比一下top上关于内存的数值,你就可以发现限速没有做好是对机器最起消耗作用的。
这时候主下载服务器已经可以在晚上高峰期承接500个左右的用户的下载需求了,速度平均在100k-200k左右。我是机房直接做的测试,得到的数据应该不受太多带宽的影响。
 
下载服务器一直都是系统维护人员最头痛的东西,首先是容易挂, 其次是经常更新和备份,最后是速度上不去网友们骂你。呵呵 第一次在机房发现下载时成波浪号曲线时还以为是系统的原因,结果检查了一边APACHE以后发现没有配置上的错误。最后就选择了尝试一下修改限速数值看 看,最后发现了有一定比例关系的。可是当时在公司做实验的时候,在BandWidth上设置的数值确实可以正常限速,现在想想当时只考虑了下载时的上限速 度并没有考虑到服务器承受过多压力以后的运行能力。
 
总结一下,好的下载服务器配置应该是可以考虑到超压情况下的用户下载速度上限设置和最低速度的保证!
 
以上只是我一点实际工作的感受,有什么不完善的地方欢迎及时给我提出批评!
posted @ 2008-09-16 10:40 蓝剑 阅读(385) | 评论 (0)编辑 收藏
 你知道吗,如果你的web server是采用apache那你就有机会通过安装一个软件模块提高你的网站访问速度,最大能有10倍之多!这可不是吹牛,你看看原理就明白了。这个神 通广大的模块就是mod_gzip. 它通过用和gzip一样的压缩算法对apache发出的页面进行压缩,可能的话可以把页面压缩成为原来大小的十份之一。哪,如果10K的页面只要传1K这 不就是提速10倍嘛。当然一般网页只可以达到3-6倍。那也很不错。对吧。连google这样一个大的网站都采用这个技术。你还不快跟上?

这样一个好东东,来来来,我告诉你如何安装:分3步,1、下载,2、修改配置,3、测试。

1.下载
到http://www.remotecommunications.com/apache/mod_gzip 下载mod_gzip.c 还有它的补丁。

2.安装, 配置
把mod_gzip放到你的apache的源代码目录下,新建一个mod_gzip目录如果需要补丁(针对1.3.17.la版) 还需运行:
patch mod_gizp.c
按你需要,在配置中选择动态DSO或静态编译进apache系统。如何处理在README中讲得很清楚,如-add-module=mod_gzip.c, make,make install等等。这里不多讲。

把下列配置加入httpd.conf尾部。

# MOD_GZIP configuration
mod_gzip_on Yes
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime text/*
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_dechunk Yes
mod_gzip_temp_dir "/tmp"
mod_gzip_keep_workfiles No
mod_gzip_item_include file ".php3$"
mod_gzip_item_include file ".txt$"
mod_gzip_item_include file ".html$"
mod_gzip_item_exclude file ".css$"
mod_gzip_item_exclude file ".js$"

在保存修改后运行
…/bin/apachectl configtest确保配置修改无误。
然后用 apachectl restart 指令重起服务。

3.修改,测试
在宣布做好了之前在测试一下是优秀程序员的习惯。为了尽量不影响你的用户的浏览,我们可以用把新的apache驱动在8080端口上或者用指令控制mod_gzip起作用的目录,而不是一下子全用mod_gzip.
用法如下:

MOD_GZIP configuration

你再用IE4或netscape认真的全面测试一遍,没有问题后你就可以让你的用户很开心的发现'XX网站现在好快哦。'

Mod_gzip真的很神奇,100K的HTML大文档只要12K就可以传到用户端了。越先采用这个技术你的用户对你的网站的高速度印象就越深。不过有 所得必有所失,由于解压是在客户端进行的,效果和用户的浏览器有一定关系。笔者测试了MSIE4,5,5.5,netscape 4.5 , 6都运行得很好. 不过java,jpg,gif等等是没法压缩的。
posted @ 2008-09-16 10:35 蓝剑| 编辑 收藏
仅列出标题  下一页


<2019年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(6)

随笔分类(62)

随笔档案(90)

文章档案(9)

相册

友情链接

搜索

  •  

积分与排名

  • 积分 - 304817
  • 排名 - 162

最新评论

阅读排行榜

评论排行榜