让Apache支持ASP.NET

Apache是目前广泛使用的一种网络服务器程序,不仅在UNIX/LINUX平台上被大量使用,而且在Windows平台上也有许多站点放弃了IIS而转向Apache。
.NET是微软推出的功能强大的开发技术,其目标就是与Java抗衡。ASP.NET非常适合于中小企业的Web应用,其性能较ASP3.0有了极大的提高。
下面就介绍让Apache支持ASP.NET的办法。

首先,必须要有Windows环境和.NET Framework的支持。此外还建议安装安装.NET开发工具如.NET Framework SDK或者VisualStudio.NET。需要注意的是Windows的版本应为2000、2003和XP。Win9X系列不能安装.NET Framework。

然后需要安装Apache。应该使用Win32平台的Apache,版本2.0以上。推荐使用2.0.51版本。下载地址:
http://apache.freelamp.com/httpd/binaries/win32/ap...
具体的安装过程请参阅其他文章,本文不再赘述。

下面要下载并安装Apache环境下的ASP.NET模块。下载地址:
http://www.apache.org/dist/httpd/mod_aspdotnet/mod...
下载完成后双击打开,一路Next即可安装完成。

为了便于管理,我们在htdocs目录下新建一个active目录,专门存放.aspx文件。现在需要对httpd.conf文件作一定配置,在文件末尾添加:

#asp.net
LoadModule aspdotnet_module "modules/mod_aspdotnet.so"

AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj \
           licx rem resources resx soap vb vbproj vsdisco webinfo

<IfModule mod_aspdotnet.cpp>

 # Mount the ASP.NET example application
 AspNetMount /active "D:/Program Files/Apache Group/Apache2/htdocs/active"

 # Map all requests for /active to the application files
 Alias /active "D:/Program Files/Apache Group/Apache2/htdocs/active"

 # Allow asp.net scripts to be executed in the active example
 <Directory "D:/Program Files/Apache Group/Apache2/htdocs/active">
   Options FollowSymlinks ExecCGI
   Order allow,deny
   Allow from all
   DirectoryIndex Default.htm Default.aspx
 </Directory>

 # For all virtual ASP.NET webs, we need the aspnet_client files
 # to serve the client-side helper scripts.
 AliasMatch /aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) \
     "C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
 <Directory \
     "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
   Options FollowSymlinks
   Order allow,deny
   Allow from all
 </Directory>

</IfModule>

其中D:/Program Files/Apache Group/Apache2是Apache的安装目录,应根据实际情况更改。
现在可以在active目录下放上ASP.NET探针。重启Apache之后,即可体验Apache下的ASP.NET了。

由于IIS和Apache下的ASP.NET都是运行在Common Language Runtime(CRL)的基础上,因此Apache环境下的ASP.NET程序的运行速度不会比在IIS下慢。

这是一个小巧的路由器工具包,里面包含了三个工具:
子网掩码计算器,Wildcard 掩码监测器,十进制 IP 计算器

up/HA_bosncalc.exe
Partition Logic 是一款免费而且开放原始码的磁盘管理工具,使用者不仅能够透过它来创建、删除磁盘,而且也可以利用它来达成商业软件才具有的调整分割区大小的功能。这个功能对于许多使用者来说可是梦寐以求的喔,因为常常会有使用者在分割磁盘之初未事先规划好容量,等到使用了依段时间后才发现磁盘大小分配不恰当的情形,这个时候就可以利用 Partition Logic 的调整扇区大小的功能,在不损坏原有数据的情况下来重新分配扇区的大小。

对于想要对磁盘内容进行备份的使用者而言, Partition Logic 也提供了磁盘数据完全复制的功能,让使用者可以轻松快速地将数据由 A 磁盘转移到 B 磁盘,确保数据的安全性。这么棒的功能,原本都是要在付费购买的软件中才能够拥有,但是现在却可以免费享受到,聪明的使用者们还在等什么呢?马上就来试试 Partition Logic 带来的超强功能吧!

Partition Logic 有ISO版和磁盘版本,ISO版需要烧录成光盘后使用。

http://visopsys.org/partlogic
BIND 在win 2000 下的安装及配置
一.、Bind 简介。

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。本文将介绍它在win 2000 server中最基本的安装和配置。

二.、软件的相关资源及准备工作。

官方网站:http://www.bind.com/
源码软件包:Bind 是开源的软件,可以去其官方网站下载。http://www.isc.org/index.pl/sw/bind/ ,目前最新版本为bind-9.3.1。
帮助文档:http://www.isc.org/index.pl/sw/bind/ 有该软件比较全面的帮助文档。
FAQ:http://www.isc.org/index.pl/sw/bind/ 回答了该软件的常见问题。
配置文件样例:http://www.bind.com/bind.html 一些比较标准的配置文件样例。
下载 UltraEdit  因为要修改配置文件,都需要该软件 ,当然你用记事本也行,提醒你的是用记事本很容易出问题
三.、软件的安装。

1. 安装
由其官方网站中下载其源码软件包bind-9.3.1. tar.gz。接下来我将对安装过程的一些重要步骤,给出其解释:
2. 解压压缩包,运行安装文件setup
3. 默认情况下,安装过程是不会建立配置文件和一些默认的域名解析的,不过并不妨碍,可以从下载一些标准的配置文件(http://www.bind.com/bind.html),也可以使用本文所提供的样例文件。 默认情况下,安装路径为C: \winnt\system32\dns 下,可以看到有两个目录,分别为bin和etc, 默认的主配置文件   \etc\named.conf(须手动修改该文件)。

四.软件的配置。
1 BIND比较重要的配置文件有:named.conf,named.root,rndc.conf,还有\ etc\named目录。
2 下面逐步分析一个比较基础的配置文件named.conf:(注:named配置文件采用和c语言相同的注释符号程序能否正常运行,全靠这个文件)。
(1) log options
/*
* log option
*/
logging {
channel default_syslog { syslog local2; severity error; };
channel audit_log { file "..\log\named.log"; severity error; print-time yes; };
/*手动建立该目录和文件,并修改该路径,注意2000 里路径的符号和unix下路径的写法不同,以后程序中如果读取文件,都要注意路径的写法。*/
category default { default_syslog; };
category general { default_syslog; };
category security { audit_log; default_syslog; };
category config { default_syslog; };
category resolver { audit_log; };
category xfer-in { audit_log; };
category xfer-out { audit_log; };
category notify { audit_log; };
category client { audit_log; };
category network { audit_log; };
category update { audit_log; };
category queries { audit_log; };
category lame-servers { audit_log; };
};


这一部分是日志的设置,其中最主要的是

file "..\log\named.log"; 这一句指定了日志文件的位置,要正常启动named,必须要保证这一文件是存在的,并且named 进程对它有读写权限。

(2) options

options {
directory “..\etc\namedb";
/* 注意写法 修改该路径
listen-on-v6 { any; };

// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below.  This will make you
// benefit from its cache, thus reduce overall DNS traffic in the Internet.

forwarders {
your.upper.DNS.address;
};

/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below.  Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;

/*
* If running in a sandbox, you may have to specify a different
* location for the dumpfile.
*/
dump-file "/etc/named_dump.db";
};


这一部分是一些基本的配置项:

directory ".\etc\namedb "; 指定域名解析等文件的存放目录(须手动建立);

listen-on-v6 { any; }; 支持ipv6的请求;
forwarders {
your.upper.DNS.address;
}; 指定前向DNS,当本机无法解析的域名,就会被转发至前向DNS进行解析。


(3) 线索域和回环域

zone "." {
type hint;
file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};


指定线索域和本地回环域,这一部分使用一些标准的例子就可以。

file "named.root"; 指定该域的解析文件,其目录为options中directory "\etc\namedb";指定的。在本例中为\etc\namdb。

4)自定义域

zone "test.com" {
type master;
file "zone.test ";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "zone. test.rev";
};
zone "4.0.0.f.0.5.2.0.1.0.0.2.IP6.ARPA" {
type master;
allow-transfer { any;};
      allow-query { any; };
file "ipv6.rev";
};

zone "lowerlevelzone.test.com" {
type slave;
masters {
192.168.1.1;
};
};

这一部分是配置文件中我们需要重点关心的部分:

zone "test.com" {
type master;
file "zone.test ";
}; 设定test.com域;
type master 指明该域主要由本机解析;
file "zone.test "指定其解析文件为zong.test,目录为options中设定的目录本例中为\etc\named。

zone "0.168.192.in-addr.arpa" {
type master;
file "zone. test.rev";
}; 指定ipv4地址逆向解析

type slave 指明该域主要由低一级的域名服务器解析;
masters {
192.168.1.1;
};

// 指定低一级的域名服务器ip地址。

到此我们就初步建立了一个标准的named 的主配置文件,接下来建立对应的域名解析或逆向解析文件。



3 域名解析和IP地址逆向解析文件:\etc\namedb\zone.test

配置文件的格式大致如下


; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the \etc\namedb directory.
;
@ IN SOA ns.test.com. root.test.com.(
2005030116; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.test.com

ns IN A 192.168.0.1
www6 IN AAAA 2001:250:f004::10
www IN A 192.168.0.2

本文件前半部分是一些默认的参数设置,只需把域名改成对应得你要设置的域就行,其余的不用过分深究..几个参数稍做解释。

几个需要注意的地方
IN NS ns.test.com;
这一条必须有,来指定本域的域名服务器 ;
域名必须以"."结尾。)
本文件的第二部分(倒数三行),指定了该域上的主机:
ns IN  A 192.168.0.1
ns 为主机名,A 代表地址类型为IPV4地址,192.168.0.1 是实际ip地址,这一条记录的含义是ns.test.com 的ip地址为 192.168.0.1
www6 IN AAAA 2001:250:f004::10
www6 为主机名,AAAA代表地址类型为IPV6地址,2001:250:f004::10 是其IPV6地址,这条记录的含义是www6.test.com 的ip地址是2001:250:f004::10 。


2)IP地址逆向解析:

ipv4 逆向解析:    etc\namedb\zone.test.rev


; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the \etc/namedb directory.
;
@ IN SOA ns.test.com. root.test.com.(
2005030116; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.test.com
;

1 IN PTR ns.test.com.
2 IN PTR  www.test.com./


五  几个配置文件到此基本配置完成,成功了一半,接下来通过cmd 进入bin 的目录
运行
1 运行  rndc-confgen –a  生成一个 rndc.key 为什么这么做请看下面这段话,这是BIND安装文件的说明。

which will create a rndc.key file in the dns\etc directory. This will allow you to run rndc without an explicit rndc.conf file or key and  control entry in named.conf file. See section 3.4.1.2 of the ARM for   details of this. An rndc.conf can also be generated by running:

2  运行 rndc-confgen > rndc.conf

然后你会发现,当前目录有一个rndc.conf的密钥文件了,呵呵,如果你想看一下内容,也可以使用UltraEdit 打开它,该文件内容大致如下:


# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "o2iuzvKIljrrxw7A4cJITQ==";
};

options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "o2iuzvKIljrrxw7A4cJITQ==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf


注意,请把后面以:

# Use with the following in named.conf, adjusting the allow list as needed:

开始的这一部份,加到named.conf后面并去掉#才可以,否则后面的rndc status将显示超时退出...


六  测试
嗯,到此为止,好象BIND 9就可以顺利运行了,请按下面的步骤测试吧

进入dos 进入到 bin 目录
named -g bind -c  ..\etc\named.conf &

& 的作用是在后台运行

-c的作用是以指定的配置文件运行

,-g选项表示前台运行,并将调试信息打印到标准输出,这在我们安装调试阶段是非常有帮助的。

当你有看到running字样时,说明已经配置正确了,如果要控制BIND 9的运行,更方便的使用rndc命令来进行,

再开一个dos 窗口,进入到bin 目录  运行
rndc status
当显示如下信息时,可能会显示如下信息…

number of zones: 5
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
server is up and running

如果看见了 恭喜你 呵呵  ,终于正常配置成功 。如果没有显示上面的信息,请检查你的named.conf文件里面是否配置了rndc.conf里面的key。



至此为止,一般可以实际运作的BIND 9就建立起来了,您可以rndc rolead一下,让最新的设置及软件生效。
如果在安装过程中出现错误,您可以先检查完错误,再接着安装下去。或者你可以选择你感兴趣的某些部份安装!
当然因为时间仓促,涉及到的知识太广,加上本人能力有限,其中错误在所难免,恳请各位读者提出来,大家共同提高,共同进步!
我的联络方式是:
pengzhencai@163.com

http://bbs.chinaunix.net/forum/viewtopic.php?t=596...爱是福
在网站上加了那个广告,就是那段js代码;有时候在打开网站时,那个广告调不出来,而且打开网页的速度爆慢。
本站的Google AD 是这样解决,在此做个记录:
在需要插入广告的页面(blogview.asp)添加代码:  (若显示在页面的左右和背景颜色要修改相对的代码)

<table width="772" height="90" border="0" align="center" cellpadding="0" cellspacing="0">
 <tr>
   <td bgcolor="#eeeed6">
     <script language="JavaScript" src="googlead.js"></script>
  </td>
 </tr>
</table>


新建一个googlead.js文件 (height=90 width=772 可以根据实际大小更换)

document.write("<iframe marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no height=90 width=728 src=googlead.html></iframe>");


新建一个googlead.html文件 (Google广告代码)

</style><script type="text/j avascript"><!--
google_ad_client = "pub-0392043489315354";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_channel ="";
google_color_border = "eeeed6";
google_color_bg = "eeeed6";
google_color_link = "990000";
google_color_url = "666666";
google_color_text = "333333";
//--></script>
     <script type="text/j avascript"
 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
     </script>

完整VI项目设计书

一、视觉基本要素设计  
二、视觉应用要素设计的准备工作  
三、具体应用设计项目的展开  
四、编制VI视觉识别手册 
  

一、视觉基本要素设计
  
  企业标志  
  企业标志,可分为企业自身的标志和商品标志。  
  企业标志特点:  
  其一,识别性。  
  其二,系统性。  
  其三,统一性。  
  其四,形象性。  
  其五,时代性。  
  企业标志设计作业流程:  
  调查企业经营实态、分析企业视觉设计现状,其具体包括如下现状:  
  其一,企业的理念精神内涵与企业的总体发展规划。  
  其二,企业的营运范围、商品特性、服务性质等。  
  其三,企业的行销现状与市场占有率。  
  其四,企业的知名度与美誉度。  
  其五,企业经营者对整个形象战略及视觉识别风格的期望。  
  其六,企业相关竞争者和本行业特点的现状等。  
  1、确立明确的概念。  
  2、具体设计表现。  
  3、标志作业的缜密化:  
  其一,标志细部的缜密化。  
  其二,标志形态的数值化:  
  一是方格化,  
  二是比例尺寸标志法,  
  三是圆弧角度标志法。  
  其三,标志形态的多样化:  
  线条粗细的变化;  
  正负形的变化;  
  彩色与黑白的变化;  
  各种点、线、面的变化(如空心体、网纹、点成面、线成面等);  
  对应不同媒体的形态变更;  
  缩小或放大形态的变化。  
  企业标准字  
  企业标准字是将企业名称、企业商标名称略称、活动主题、广告语等进行整体组合而成的字体。  
  企业标准字特征:  
  其一,识别性。  
  基二,可读性。  
  其三,设计性。  
  其四,系统性。  
  企业标准字种类:  
  其一,企业名称标准字。  
  其二,产品或商标名称标准字。  
  其三,标志字体。  
  其四,广告性活动标准字。  
  企业命名或更名:  
  企业更名方案有以下几种情况:  
  其一,全面变更公司名称,包括现有标准字、标准色等基本视觉要素。  
  其二,部分变更或简化企业名称,同时推出新的标准字、标准色。  
  其三,阶段性变更。  
  其四,统一企业名称和商标品牌名称。  
  其五,在企业名称的标准字和标准色不变的前提下,根据不同的使用场合,开发出适应不同场合的变化形式,以求达到形式变化的感觉。  
  标准字制图法:  
  标准字制图法常用两种方法:  
  其一,方格表示法。  
  其二,直接标志法。  
  企业标准色  
  企业标准色,是指企业通过色彩的视知觉传达,设定反映企业独特的精神理念、组织机构、营运内容、市场营销与风格面貌的状态的色彩。  
  标准色的开发设定:  
  调查分析阶段:  
  其一,企业现有标准色的使用情况分析。  
  其二,公众对企业现有色的认识形象分析。  
  其三,竞争企业标准色的使用情况分析。  
  其四,公众对竞争企业标准色的认识形象分析。  
  其五,企业性质与标准色的关系分析。  
  其六,市场对企业标准色期望分析。  
  其七,宗教、民族、区域习惯等忌讳色彩分析。  
  概念设定阶段:  
  积极的、健康的、温暖的等(如红色);  
  和谐的、温情的、任性的等(如橙色);  
  明快的、希望的、轻薄的等(如黄色);  
  成长的、和平的、清新的等(如绿色);  
  诚信的、理智的、消极的等(如蓝色);  
  高贵的、细腻的、神秘的等(如紫色);  
  厚重的、古典的、恐怖的等(如黑色);  
  洁净的、神圣的、苍白的等(如白色);  
  平凡的、谦和的、中性的等(如灰色)。  
  色彩形象阶段:  
  通过对企业形象概念及相对应的色彩概念和关键语的设定,进一步确立相应的色彩形象表现系统。  
  模拟测试阶段:  
  其一,色彩具体物的联想、抽象感情的联想及嗜好等心理性调查。  
  其二,色彩视知觉、记忆度、注目性等生理性的效果测试。  
  其三,色彩在实施制作中,技术、材质、经济等到物理因素的分析评估。  
  色彩管理阶段:  
  本阶段主要是对企业标准色的使用,作出数值化的规范,如表色符号、印刷色数值。  
  实施监督阶段:  
  对不同材质制作的标准色进行审定;  
  对印刷品打样进行色彩校正;  
  对商品色彩进行评估;  
  其它使用情况的资料收集与整理等。  
  辅助图形  
  辅助图形是企业识别系统中的辅助性视觉要素,它包括企业造型、象征图案和版面编排等三个方面的设计。  
  1、企业造型(又称之为商业角色或吉祥物、商业标识画)的设计与应用:  
  企业造型是为了强化突出企业或产品的性格特征,而设计的漫画式人物、动物、植物、风景或其它非生命物等,作为企业的具体象征。  
  企业造型的应用:  
  其一,二维媒体,如印刷品等。  
  其二,三维媒体,如影视媒体。  
  其三,户外广告和POP广告等,如路牌、车体。  
  其四,企业公关物品和商品包装,如赠品等到。  
  2、企业象征图形的设计构成:  
  象征图形不是纯装饰的图书馆案,是企业基本视觉要素的拓展联系。  
  企业象征图形的设计题材:  
  其一,以企业标志的造型为开发母体。  
  其二,以企业标志或企业理念的意义为开发母体。  
  3、版面编排设计:  
  一般的版面包括天头、版心、地脚三大部分,编排的内容要素包括视觉识别系统中的基本要素组合、正文(文字和图)、企业造型等,它们处于版面的不同位置。  
  版面编排常用两种方式表示其结构:  
  其一,直接标示法。  
  其二,符号标志法。  
  企业视觉识别基本要素的组合方式  
  根据具体媒体的规格与排列方向,而设计的横排、竖排、大小、方向等不同形式的组合方式。   基本要素组合的内容:  
  其一,使目标从其背景或周围要素中脱离出来,而设定的空间最小规定值。  
  其二,企业标志同其它要素之间的比例尺寸、间距方向、位置关系等。  
  标志同其它要素的组合方式,常有以下形式:  
  一是标志同企业中文名称或略称的组合;  
  二是标志同品牌名称的组合;  
  三是标志同企业英文名称全称或略称的组合;  
  四是标志同企业名称或品牌名称及企业选型的组合;  
  五是标志同企业名称或品牌名称及企业宣传口号、广告语等的组合;  
  六是标志同企业名称及地址、电话号码等资讯的组合。  
  禁止组合规范:  
  其一,在规范的组合上增加其它造型符号。  
  其二,规范组合中的基本要素的大小、广告、色彩、位置等发生变换。  
  其三,基本要素被进行规范以外的外理,如标志加框、立体化、网线化等。  
  其四,规范组合被进行字距、字体变形、压扁、斜向等改变。  
  专用字体  
  专用字体包括现有标准字体和指定字体。  
  标准字体:  
  多用于企业名称、商品名称、商标名称等。  
  指定字体:  
  常用于部门名称、设施名称、分支机构名称及其地址、广告内容、正式文书等。  
  设计选择专用字体应注意事项:  
  其一,调查整理专用字体的使用范围、使用目的、使用状况等。  
  其二,选用指定字体,应考虑同标志和标准字体等基本要素的风格相协调。  
  其三,所选字体的种类及文字的组合形态、方法应有一定的规律,并形成具有可读性的、再现性的、识别性的文字系统。  
  返回页首  


二、视觉应用要素设计的准备工作 
  应用要素项目的现状调查  
  现状项目的收集分类:  
  对现有应用要素的项目收集的,主要集中于以下项目内容:  
  其一,事务用品类,如名片、各式文书等。  
  其二,广告促销类,如小手册、电视广告、公告资料等。  
  其三,标识招牌类,如旗帜、各类导引标识等。  
  其四,运输工具类,如运输卡车、拖车等。  
  其五,商品包装类,如商标、包装纸等。  
  其六,员工制服类,如徽章、工作服等。  
  其七,建筑环境类,如外观、办公室等。  
  其八,展示典礼等,如纪念活动、展示环境、专卖店等。  
  应用要素设计开发策略的确定:  
  对于某个企业形象中的具体应用要素设计项目而言,在开发设计之前,应对其客观的限制条件和依据作出必要的确定,避免设计项目虽然很美,但不能使用的问题:  
  其一,项目的功能需要。  
  主要是指完成设计项目成品所必需的基本条件,如形状、尺寸规格、材质、色彩、制作方式和用途等。   其二,项目使用的法律性限制。  
  如信封的规格、招牌指示等环境要素的法规条例。  
  其三,行业性质的需要。  
  主要是指企业所在行业中,一些约定俗成的规定或需要,如事务性用品中的单据、包装类的规定等。  
  返回页首  

三、具体应用设计项目的展开
  
  目录:  
  1、事务用品类;  
  2、包装产品类;  
  3、旗帜规划类;  
  4、员工制服类;  
  5、媒体标志风格类;  
  6、广告招牌类;  
  7、室内外指示类;  
  
  8、环境风格类;  
  9、交通运输类;  
  10、展示风格类;  
  11、专卖店风格类;  
  12、其它。  
事务用品类  
其项目细则包括:  
  1、名片  
  2、信纸  
  3、信封  
  4、便笺  
  5、各型公文袋  
  6、资料袋  
  7、薪金袋  
  8、卷宗袋  
  9、合用书  
  10、报价单  
  11、各类表单和账票  
  12、各类证卡(如邀请卡、生日卡、圣诞卡、贺卡)  
  13、年历、月历、日历  
  14、工商日记  
  15、奖状、奖牌  
  16、茶具  
  17、办公设施等用具(如纸镇、笔架、圆珠笔、铅笔、雨具架、订书机、传真机等)  
主要设计要素:  
事务用品类的主要设计要素一般包括:  
企业标志  
企业名称(全称或略称)  
标志字  
标准字  
标准色彩  
企业造型  
象征图形  
企业署名  
地址、电话、电报、电传、电子邮件信箱、邮政编码  
企业标语口号  
营运内容  
事务用品名称(如“请柬”、“合同书”)  
图形、文字 、构图  
肌理、制作工艺等  
包装产品类  
包装产品类项目细则:  
  1、外包装箱(大、中、小),  
  2、包装盒(大、中、小),  
  3、包装纸(单色、双色、特别色),  
  4、包装袋(纸、塑料、布、皮等材料),  
  5、专用包装(指特定的礼品用、活动事件用、宣传用的包装),  
  6、容器包装(如瓶、罐、塑料、金属、树脂等材质),  
  7、手提袋(大、中、小),  
  8、封口胶带(宽、窄),  
  9、包装贴纸(大、中、小),  
  10、包装封缄(大、中、小),  
  11、包装用绳,  
  12、产品外观,  
  13、产品商标表示,  
  14、产品吊牌,  
  15、产品铭牌等。  
  主要设计要素:  
  包装形式:  
  单件设计、成套设计、组合设计、组装设计等。  
  构成要素:  
  企业署名(标志、标准字体、标准色、企业造型、象征图形等),  
  图形(摄影、插图等),  
  文字(使用说明、质量保证等),  
  材质(纸、塑料、金属、布、皮等),  
  结构,  
  制作工艺等。  
  旗帜规划类  
  主要项目细则:  
  1、公司旗帜(标志旗帜、名称旗帜、企业造型旗帜 )  
  2、纪念旗帜  
  3、横式挂旗  
  4、奖励旗  
  5、促销用旗  
  6、庆典旗帜  
  7、主题式旗帜等。  
  8、其中各类吊挂式旗帜多用于渲染环境气氛,并与不同内容的公司旗帜,形成具有强烈形象识别的效果。  
  基本设计要素:  
  企业标志  
  企业名称略称  
  标准色  
  企业造型  
  广告语  
  品牌名称  
  商标  
  图形  
  材质(纸、布、金属等)  
  员工制服类  
  主要项目细则  
  1、男女主管职员制服(二季)  
  2、男女行政职员制服(二季)  
  3、男女服务职员制服(二季)  
  4、男女生产职员制服(二季)  
  5、男女店面职员制服(二季)  
  6、男女展示职员制服(二季)  
  7、男女工务职员制服 (二季)  
  8、男女警卫职员制服 (二季)  
  9、男女清洁职员制服 (二季)  
  10、男女后勤职员制服 (二季)  
  11、男女运动服 (二季)  
  12、男女运动夹克 (二季)  
  13、运动帽、鞋、袜、手套;  
  14、领带、领带夹、领巾、皮带、衣扣;  
  15、安全帽、工作帽、毛巾、雨具。  
  主要设计要素:  
  企业基本视觉要素的运用,如企业标志、企业名称、标准色、广告语等  
  制服的内外造型(外观形态、内部款式等)  
  质料(如朴素自然的棉麻布料,庄重挺拔的毛料,华丽高雅的丝绸缎料等)  
  不同岗位性质的制服色彩  
  专制的衣扣、领带、领带夹、拉链、皮带等服饰配件  
  媒体标志风格类  
  主要项目细则:  
  1、电视广告商标标志风格;  
  2、报纸广告商标标志风格;  
  3、杂志广告商标标志风格;  
  4、人事招告商标标志风格;  
  5、企业简介商标标志风格;  
  6、广告简介、说明书商标标志风格;  
  7、促销POP、DM广告商标标志风格;  
  8、海报商标标志风格;  
  9、营业用卡(回函)商标标志风格。  
  媒体广告类  
  主要项目细则:  
  1、导入CI各阶级对内对外广告;  
  2、企业简介、产品目录样本;  
  3、电视CF、报纸、海报、杂志广告;  
  4、直邮DM广告、POP促销广告;  
  5、通知单、征订单、明信片、优惠券等印刷物;  
  6、对内对外新闻稿;  
  7、年度报告、报表;  
  8、企业出版物(对内宣传杂质、宣传报)。  
  主要设计要素:  
  企业标志、名称略称、象征图形等企业署名  
  企业色彩系统的运用  
  媒体比例尺寸、篇幅、材质(如纸、霓虹灯等)  
  文字、图形图象、声音、镜头、光影及其结构格式  
  室内外标识类  
  项目细则:  
  1、招牌类:  
  2、室内外直式、模式、立地招牌;  
  3、大楼屋顶、楼层招牌;  
  4、骑楼下、骑楼柱面招牌;  
  5、悬挂式招牌;  
  6、柜台后招牌;  
  7、企业位置看板(路牌);  
  8、工地大门、工务所、围篱、行道树围篱、牌坊。  
  指示类:  
  室内外指示系统;  
  1、符号指示系统(含表示禁止的指示、公共环境指示);  
  2、机构、部门标示牌;  
  3、总区域看板;  
  4、分区域看板;  
  5、标识性建筑物壁画、雕塑造型。  
  环境风格类  
  项目细则:  
  1、主要建筑物外观风格;  
  2、建筑内部空间装饰风格;  
  3、大门入口设计风格;  
  4、室内形象墙面;  
  5、厂区外观色带;  
  6、玻璃门色带风格;  
  7、柜台后墙面设计;  
  8、公布栏、室内精神标语墙;  
  9、环境色彩标志;  
  10、踏垫;  
  11、烟灰缸、垃圾桶;  
  12、员工储物柜;  
  13、室内装饰植物风格。  
  交通运输工具类  
  1、营业用工具,如服务用的轿车、吉普车、客货两用车、展销车、移动店铺、汽船等。  
  2、运输用工具,如大巴、中巴、大小型货车、厢式货柜车、工具车、平板车、脚踏车、货运船、客运船、游艇、飞机等。  
  3、作业用工具,如起重机车、推土车、升降机、曳拉车、拖车头,公共用清扫车、垃圾车、救护车、消防车、电视转播车等。  
  主要设计要素:  
  企业标志  
  品牌标志  
  标准字体  
  企业造形  
  象征图案及其组合方式,位置比例尺寸、制作工艺等  
  展示风格类  
  项目细则:  
  1、展示会场设计;  
  2、橱窗设计;  
  3、展板造型;  
  4、商品展示架、展示架、展示台;  
  5、展示参观指示;  
  6、舞台设计;  
  7、照明规划;  
  8、色彩规划;  
  9、商标、商标名称表示风格;  
  10、椅子、桌子、沙发等风格。  
  主要设计要素:  
  企业标志  
  标准字体  
  标准色  
  文字  
  图形  
  企业造型  
  空间结构  
  灯光  
  材料  
  展品  
  影音等  
  专卖店识别风格  
  专卖店识别企划:  
  其一,准备阶段。  
  提出整个识别设计的进度表,并列出有关应知事宜,创意设计方案和简单说明,收集各项资料,制定专卖店识别所需的计划等。  
  其二,设计阶段。  
  根据上阶段所准备的资料,制定平面配置图及各部分的立面图、透明图;制定家具风格、色彩规划及材料计划表。  
  其三,编制规范手册。  
  制作详细的平面图、立体图、剖视图和局部大样图;  
  灯光配置规划和说明;  
  家具配置计划图;  
  施工规范图;  
  施工规范说明。  
  项目细则:  
  1、各空间区域的平面图和立体图、施工图;  
  2、各类材质规划;  
  3、各空间区域色彩风格;  
  4、功能设备规划(如水电、照明等);  
  5、环境设施规划(如柜台、桌椅等家具,盆栽、垃圾桶、烟灰缸等环境风格,各类橱柜);  
  6、店员服饰风格、店内外广告招牌造型;  
  7、店内外标识类;  
  8、商品展示类(如商品陈列台、促销台、价目牌、分类牌、店卡、目录架、品牌灯箱等)。  
  返回页首  

四、编制VI视觉识别手册
 
   设计手册结构体系  
  其一,概念的诠释。  
  如CI概念、设计概念、设计系统的构成及内容说明。  
  其二,基本设计项目的规定。  
  主要包括各设计项目的概念说明和使用规范说明等。如企业标志的意义、定位、单色或色彩的表示规定、使用说明和注意事项,标志变化的开发目的和使用范围,具体禁止使用例子等。  
  其三,应用设计项目的规定。  
  主要包括各设计项目的设计展开标准,使用规范和样式、施工要求和规范详图等。如事务用品类的用字体、色彩及制作工艺等。  
  设计手册编制形式  
  其一,将基本设计项目规定和应用设计项目规定,按一定的规律编制装订成一册,多采用活页形式,以便于增补。  
  其二,将基本设计项目规定和应用设计项目规定,分开编制,各自装订成册,多采用活页和目录形式。  
  其三,根据企业不同机构(如分公司)或媒体的不同类别,将应用设计项目分册编制,以便使用。   设计手册具体内容  
  其一,引言部分。  
  如领导致词,企业理念体系说明和形象概念阐述,导入CI的目的和背景,手册的使用方法和要求。  
  其二,基本设计项目及其组合系统部分。  
  如基本要素的表示法、变体设计等。  
  其三,应用设计项目部分。  
  其四,主要设计划要素样本部分。  
  如标志印刷样本或干胶,标准色色票等

以下是转自:
http://www.eway.com.ru/index.php ... 00508&setday=10

*****************************
「 解密ZEND加密后的PHP 」

先下载: vld-0.8.0  

执行
#tar -xzf vld-0.8.0.tgz //解压
#mv vld-0.8.0 vld //重命名
#cd -R vld ../php-4.3.8/ext //拷贝vld目录到php的解压目录下的ext中
#cd php-4.3.8
#rm configure //删除configure,因为下面的buildconf会重新生成新的configure
#./buildconf //如果出现错误,就按提示加上相应的参数.
#./configure --with-mysql --with-apxs2=/usr/www/bin/apxs --enable-vld 重新检查php
#make 编译
#make install 安装

服务器必须先安装ZendOptimizer
运行Zend后的文件,查看源代码就可以看到了.


方法二:
只要你有linux主機,再裝一個程序,就能瀏覽源碼了.

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_vld.h"
#include "srm_oparray.h"

static zend_op_array* (*old_compile_file)(zend_file_handle* file_handle, int type TSRMLS_DC);
static zend_op_array* vld_compile_file(zend_file_handle*, int TSRMLS_DC);

static void (*old_execute)(zend_op_array *op_array TSRMLS_DC);
static void vld_execute(zend_op_array *op_array TSRMLS_DC);


function_entry vld_functions[] = {
{NULL, NULL, NULL}
};


zend_module_entry vld_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
"vld",
vld_functions,
PHP_MINIT(vld),
PHP_MSHUTDOWN(vld),
PHP_RINIT(vld),
PHP_RSHUTDOWN(vld),
PHP_MINFO(vld),
#if ZEND_MODULE_API_NO >= 20010901
"0.8.0",
#endif
STANDARD_MODULE_PROPERTIES
};


#ifdef COMPILE_DL_VLD
ZEND_GET_MODULE(vld)
#endif

ZEND_BEGIN_MODULE_GLOBALS(vld)
int active;
int skip_prepend;
int skip_append;
int execute;
ZEND_END_MODULE_GLOBALS(vld)

ZEND_DECLARE_MODULE_GLOBALS(vld)

#ifdef ZTS
#define VLD_G(v) TSRMG(vld_globals_id, zend_vld_globals *, v)
#else
#define VLD_G(v) (vld_globals.v)
#endif

PHP_INI_BEGIN()
STD_PHP_INI_ENTRY("vld.active",  "0", PHP_INI_SYSTEM, OnUpdateBool, active,  zend_vld_globals, vld_globals)
STD_PHP_INI_ENTRY("vld.skip_prepend", "0", PHP_INI_SYSTEM, OnUpdateBool, skip_prepend, zend_vld_globals, vld_globals)
STD_PHP_INI_ENTRY("vld.skip_append", "0", PHP_INI_SYSTEM, OnUpdateBool, skip_append, zend_vld_globals, vld_globals)
STD_PHP_INI_ENTRY("vld.execute",  "1", PHP_INI_SYSTEM, OnUpdateBool, execute,  zend_vld_globals, vld_globals)
PHP_INI_END()

static void vld_init_globals(zend_vld_globals *vld_globals)
{
vld_globals->active  = 0;
vld_globals->skip_prepend = 0;
vld_globals->skip_append = 0;
vld_globals->execute  = 1;
}


PHP_MINIT_FUNCTION(vld)
{
ZEND_INIT_MODULE_GLOBALS(vld, vld_init_globals, NULL);
REGISTER_INI_ENTRIES();
old_compile_file = zend_compile_file;
old_execute = zend_execute;

return SUCCESS;
}


PHP_MSHUTDOWN_FUNCTION(vld)
{
UNREGISTER_INI_ENTRIES();

zend_compile_file = old_compile_file;
zend_execute  = old_execute;

return SUCCESS;
}



PHP_RINIT_FUNCTION(vld)
{
if (VLD_G(active)) {
  zend_compile_file = vld_compile_file;
  if (!VLD_G(execute)) {
   zend_execute  = vld_execute;
  }
}
return SUCCESS;
}



PHP_RSHUTDOWN_FUNCTION(vld)
{
zend_compile_file = old_compile_file;
zend_execute  = old_execute;

return SUCCESS;
}


PHP_MINFO_FUNCTION(vld)
{
php_info_print_table_start();
php_info_print_table_header(2, "vld support", "enabled");
php_info_print_table_end();

}

static int vld_check_fe (zend_op_array *fe, zend_bool *have_fe TSRMLS_DC)
{
if (fe->type == ZEND_USER_FUNCTION) {
  *have_fe = 1;
}

return 0;
}

static int vld_dump_fe (zend_op_array *fe TSRMLS_DC)
{
if (fe->type == ZEND_USER_FUNCTION) {
  fprintf(stderr, "Function %s:
", fe->function_name);
  vld_dump_oparray(fe);
  fprintf(stderr, "End of function %s.

", fe->function_name);
}

return ZEND_HASH_APPLY_KEEP;
}

#ifdef ZEND_ENGINE_2
static int vld_dump_cle (zend_class_entry **class_entry TSRMLS_DC)
#else
static int vld_dump_cle (zend_class_entry *class_entry TSRMLS_DC)
#endif
{
zend_class_entry *ce;
zend_bool have_fe = 0;

#ifdef ZEND_ENGINE_2
ce = *class_entry;
#else
ce = class_entry;
#endif

if (ce->type != ZEND_INTERNAL_CLASS) {
  zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t) vld_check_fe, (void *)&have_fe TSRMLS_CC);
  if (have_fe) {
   fprintf(stderr, "Class %s:
", ce->name);
   zend_hash_apply(&ce->function_table, (apply_func_t) vld_dump_fe TSRMLS_CC);
   fprintf(stderr, "End of class %s.

", ce->name);
  } else {
   fprintf(stderr, "Class %s: [no user functions]
", ce->name);
  }
}

return ZEND_HASH_APPLY_KEEP;
}

/* {{{ zend_op_array vld_compile_file (file_handle, type)
*  This function provides a hook for compilation */
static zend_op_array *vld_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
{
zend_op_array *op_array;

if (!VLD_G(execute) &&
  ((VLD_G(skip_prepend) && PG(auto_prepend_file) && PG(auto_prepend_file)[0] && PG(auto_prepend_file) == file_handle->filename) ||
(VLD_G(skip_append) && PG(auto_append_file) && PG(auto_append_file)[0] && PG(auto_append_file) == file_handle->filename)))
{
  zval nop;
  ZVAL_STRINGL(&nop, "RETURN ;", 8, 0);
  return compile_string(&nop, "NOP" TSRMLS_CC);;
}

op_array = old_compile_file (file_handle, type TSRMLS_CC);

if (op_array) {
  vld_dump_oparray (op_array);
}

zend_hash_apply (CG(function_table), (apply_func_t) vld_dump_fe TSRMLS_CC);
zend_hash_apply (CG(class_table), (apply_func_t) vld_dump_cle TSRMLS_CC);

return op_array;
}
/* }}} */

/* {{{ void vld_execute(zend_op_array *op_array TSRMLS_DC)
*  This function provides a hook for execution */
static void vld_execute(zend_op_array *op_array TSRMLS_DC)
{
// nothing to do
}
/* }}} */

Apache服务器配置

如果安装时未重新指定安装目录,Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件 httpd.conf, access.conf和srm.conf,来配置Apache服务器的行为。

   httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器的各个方面的特性,因此为了正常运行服务器便需要设置好这三个文件。

  除了这三个设置文件之外,Apache还使用mime.types文件用于标识不同文件对应的MIME类型, magic文件设置不同MIME类型文件的一些特殊标识,使得Apache 服务器从文档后缀不能判断出文件的MIME 类型时,能通过文件内容中的这些特殊标记来判断文档的MIME类型。

bash-2.02$ ls -l /usr/local/apache/conf

total 100
-rw-r--r-- 1 root wheel 348 Apr 16 16:01 access.conf
-rw-r--r-- 1 root wheel 348 Feb 13 13:33 access.conf.default
-rw-r--r-- 1 root wheel 30331 May 26 08:55 httpd.conf
-rw-r--r-- 1 root wheel 29953 Feb 13 13:33 httpd.conf.default
-rw-r--r-- 1 root wheel 12441 Apr 19 15:42 magic
-rw-r--r-- 1 root wheel 12441 Feb 13 13:33 magic.default
-rw-r--r-- 1 root wheel 7334 Feb 13 13:33 mime.types
-rw-r--r-- 1 root wheel 383 May 13 17:01 srm.conf
-rw-r--r-- 1 root wheel 357 Feb 13 13:33 srm.conf.default

  事实上当前版本的Apache将原来httpd.conf、srm.conf与access.conf中的所有配置参数均放在了一个配置文件httpd.conf中,只是为了与以前的版本兼容的原因(使用这三个设置文件的方式来源于NCSA-httpd),才使用三个配置文件。而提供的access.conf和srm.conf文件中没有具体的设置。

  由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的设置。以下使用缺省提供的httpd.conf为例,解释Apache服务器的各个设置选项。然而不必因为它提供设置的参数太多而烦恼,基本上这些参数都很明确,也可以不加改动运行Apache服务器。但如果需要调整Apache服务器的性能,以及增加对某种特性的支持,就需要了解这些设置参数的含义。

  关于Apache服务器的性能,在Internet上存在很大的争议,基本上使用Apache的使用者几乎都不怀疑它的优秀性能,Apache也支撑了很多著名的高负载的网站,但是在商业机构的评测中,Apache往往得分不高。很多人指出,在这些评测中,商业Web服务器及其操作系统往往由其专业公司的工程师进行过性能调整,而Free 的操作系统和Web服务器往往就使用其缺省配置或仅仅作很小的更改。需要指出的是,除了操作系统的性能调整之外,Apache 服务器本身的缺省配置绝不是最优化和最高效的,而是要适应几乎所有种类操作系统、所有种类硬件下的设置,多平台的软件不可能为特定平台和特定硬件提供最优化的缺省配置。因此要使用Apache的时候,性能调整是必不可少的。

  在商业评测中忽略了的另一个事实是,评测时往往对不同种类的功能进行比较,例如使用Apache的标准CGI 的性能与ISAPI,NSAPI等服务器端API比较,事实上Apache服务器与此可以比较的功能为modperl ,FastCGI,与ASP类似的功能为PHP等等,只不过由于Apache的开放模式,这些功能是由独立的开发组,作为独立的模块来实现的。但是在评测中,测试人员没有加入相应的模块评测其性能。

HTTP守护进程的运行参数

  httpd.conf中首先定义了一些httpd守护进程运行时需要的参数,来决定其运行方式和运行环境。

  ServerType standalone

  ServerType定义服务器的启动方式,缺省值为独立方式standalone,httpd服务器将由其本身启动,并驻留在主机中监视连接请求。在Linux下将在启动文件 /etc/rc.d/rc.local/init.d/apache中自动启动Web服务器,这种方式是推荐设置。

  启动Apache服务器的另一种方式是inet方式,使用超级服务器inetd监视连接请求并启动服务器。当需要使用inetd启动方式时,便需要更改为这个设置,并屏蔽/etc/rc.d/rc.local/init.d/apache文件,以及更改/etc/inetd.conf并重起inetd,那么Apache就能从inetd中启动了。

  两种方式的区别是独立方式是由服务器自身管理自己的启动进程,这样在启

动时能立即启动服务器的多个副本,每个副本都驻留在内存中,一有连接请求不需要生成子进程就可以立即进行处理,对于客户浏览器的请求反应更快,性能较高。而 inetd方式要由inetd发现有连接请求后才去启动http服务器,由于inetd 要监听太多的端口,因此反应较慢、效率较低,但节约了没有连接请求时Web服务器占用的资源。因此inetd方式只用于偶尔被访问并且不要求访问速度的服务器上。事实上inetd方式不适合http的突发和多连接的特性,因为一个页面可能包含多个图象,而每个图象都会引起一个连接请求,即使虽然访问人数造成教少,但瞬间的连接请求并不少,这就受到inetd性能的限制,甚至会影响由inetd启动的其他服务器程序。

  ServerRoot "/usr/local"

  ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerRoot定义的路径之下。

  由于httpd会经常进行并发的文件操作,就需要使用加锁的方式来保证文件操作不冲突,由于NFS文件系统在文件加锁方面能力有限,因此这个目录应该是本地磁盘文件系统,而不应该使用NFS文件系统。

  #LockFile /var/run/httpd.lock

  LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。

  PidFile /var/run/httpd.pid

  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。

  ScoreBoardFile /var/run/httpd.scoreboard

  httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件htt pd.conf,并使用不同的ScoreBoardFile。

  #ResourceConfig conf/srm.conf

  #AccessConfig conf/access.conf

  这两个参数ResourceConfig和AccessConfig,就用于和使用 srm.conf 和 access.conf 设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用httpd.conf 一个文件来保存所有的设置选项。

  Timeout 300

  Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。

  KeepAlive On

  在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较新的浏览器才支持这个功能,但还是打开使用这个选项。

  MaxKeepAliveRequests 100

  MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

  KeepAliveTimeout 15

  KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。

   MinSpareServers 5
   MaxSpareServers 10

  在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,使得既能及时回应客户请求,又能减少不必要的进程数量。

  因此就可以使用参数MinSpareServers来设置最少的空余子进程数量, 以及使用参数MaxSpareServers 来限制最多的空闲子进程数量,多余的服务器进程副本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少不必要的副本退出。

  StartServers 5

  StartServers参数就是用来设置httpd启动时启动的子进程副本数量,这个参数与上面定义的MinSpareServers和MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于MinSpareServers和大于MaxS pareServers都没有意义。

  MaxClients 150

  在另一方面,服务器的能力毕竟是有限的,不可能同时处理无限多的连接请求,因此参数Maxclient s就用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之间进行切换来为太多的客户进行服务,这样对每个客户的反应就会减慢,并降低了整体的效率。如果这个值设置的较小,那么系统繁忙时就会拒绝一些客户的连接请求。当服务器性能较高时,就可以适当增加这个值的设置。对于专业网站,应该使用提高服务器效率的策略,因此这个参数不能超过硬件本身的限制,如果频繁出现拒绝访问现象,就说明需要升级服务器硬件了。对于非专业网站,不太在意对客户浏览器的反应速度,或者认为反应速度较慢也比拒绝连接好,就也可以略微超过硬件条件来设置这个参数。

  这个参数限制了MinSpareServers和MaxSpareServers的设置,它们不应该大于这个参数的设置。

  MaxRequestsPerChild 30

  使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗,Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。

  但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的httpd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每个子进程处理服务请求次数由MaxRe questPerChild定义。 缺省的设置值为30,这个值对于具备高稳定性特点的Linux系统来讲是过于保守的设置,可以设置为1000甚至更高,设置为0支持每个副本进行无限次的服务处理。

  #Listen 3000
  #Listen 12.34.56.78:80
  #BindAddress *

  Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。由于FreeBSD系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。

  即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用VirtualHost参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 1.0标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 1.1中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。

LoadModule mime_magic_module libexec/apache/mod_mime_magic.so
LoadModule info_module libexec/apache/mod_info.so
LoadModule speling_module libexec/apache/mod_speling.so
LoadModule proxy_module libexec/apache/libproxy.so
LoadModule rewrite_module libexec/apache/mod_rewrite.so
LoadModule anon_auth_module libexec/apache/mod_auth_anon.so
LoadModule db_auth_module libexec/apache/mod_auth_db.so
LoadModule digest_module libexec/apache/mod_digest.so
LoadModule cern_meta_module libexec/apache/mod_cern_meta.so
LoadModule expires_module libexec/apache/mod_expires.so
LoadModule headers_module libexec/apache/mod_headers.so
LoadModule usertrack_module libexec/apache/mod_usertrack.so
LoadModule unique_id_module libexec/apache/mod_unique_id.so
ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_proxy.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c

    Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减少服务器提供的功能,就不要改动这里的设置。

  上面这些列表就显示了Linux下的缺省Apache服务器支持的模块,事实上很多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到pache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。

  因而动态可加载的能力还是对性能有轻微的影响,因此可以重新编译Apache,将自己所需要的功能编译进Apache 服务器内部,可以让系统显得更为干净,效率也有轻微的提高。通常仅仅为了这一个目的就重新编译Apache是没有必要的,如果需要增加其他特性而重新编译Apache,不妨在增加其他模块的同时将所有的模块都静态连接入Apache 服务器。有的使用者更喜欢动态加载模块,那么也不妨全部都使用动态加载模块。

  这些模块都被放置到/usr/local/apache/libexec/目录下, 每个模块对应Apache服务器的一个特性。详细解释每个模块的功能需要相当多的篇幅,其中比较重要的特性将在后面相应的地方中进行解释,而具体每个模块的功能及用法就需要查看Apache的文档。

  #ExtendedStatus On

  Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息。

主服务器设置

  Apache服务器需要各种设置,以定义自己使用各种参数以提供Web服务。对于使用虚拟主机的情况,除了在虚拟主机的定义项中覆盖的设置之外(有的设置必须重新定义),这里的设置也是虚拟主机的缺省设置。

  Port 80

  Port定义了Standalone模式下httpd守护进程使用的端口,标准端口是80。这个选项只对于以独立方式启动的服务器才有效,对于以inetd方式启动的服务器则在inetd.conf中定义使用哪个端口。

  在Unix下使用80端口需要root权限,一些管理员为了安全的原因,认为 httpd 服务器不可能没有安全漏洞,因而更愿意使用普通用户的权限来启动服务器,这样就不能使用80端口及其他小于1024的端口,而必须使用大于 1024的端口来启动httpd,一般情况下8000或8080也是常用的端口。而Apache httpd服务器本身可以在以root权限打开80端口后再改变为普通用户身份进行运行,这样就减少了危险性,因而就不需要考虑这个安全问题。但是如果普通用户也想安装配置自己的WWW服务器,那么就不得不使用大于1024的端口。

  User nobody
  Group nogroup

  User和Group配置是Apache的安全保证,Apache在打开端口之后,就将其本身设置为这两个选项设置的用户和组权限进行运行,这样就降低了服务器的危险性。这个选项也只用于 Standalone模式,inetd模式在inetd.conf中指定运行Apache的用户。由于服务器必须执行改变身份的setuid()操作,因此初始进程应该具备root权限,如果是使用非root用户来启动Aapche,这个配置就不会发挥作用。

  缺省设置为nobody和nogroup,这个用户和组在系统中不拥有文件,保证了服务器本身和由它启动的CGI 进程没有权限更改文件系统。在某些情况下,例如为了运行CGI与Unix交互,也需要让服务器来访问服务器上的文件,如果仍然使用nobody和nogroup,那么系统中将会出现属于nobody的文件,这对于系统安全是不利的,因为其他程序也会以nobody和nogroup的权限执行某些操作,就有可能访问这些nobody拥有的文件,造成安全问题。一般情况下要为Web服务设定一个特定的用户和组,同时在这里更改用户和组设置。

  ServerAdmin you@your.address

  配置文件中应该改变的也许只有ServerAdmin, 这一项用于配置WWW服务器的管理员的email地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster 的电子邮件发送给真正的Web管理员。

  #ServerName new.host.name

  缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的DNS名字,也可以在这里指定IP地址。当ServerName设置不正确的时候,服务器不能正常启动。

  通常一个Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,但在没有定义虚拟主机的情况下,服务器总是以自己的正式名字回应浏览器。ServerName就定义了Web服务器自己承认的正式名字,例如一台服务器名字(在DNS中定义了A类型)为exmaple.org.cn,同时为了方便记忆还定义了一个别名(CNAME记录)为www.exmaple.org.cn,那么Apache自动解析得到的名字就为example.org.cn,这样不管客户浏览器使用哪个名字发送请求,服务器总是告诉客户程序自己为 example.org.cn。虽然这一般并不会造成什么问题,但是考虑到某一天服务器可能迁移到其他计算机上,而只想通过更改DNS中的www别名配置就完成迁移任务,所以不想让客户在其书签中使用 Linux 记录下这个服务器的地址,就必须使用ServerName来重新指定服务器的正式名字。

  DocumentRoot "/www/"

  DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的UR L就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。

  注意,符号连接虽然逻辑上位于根文档目录之下,但实际上可以位于计算机上的任意目录中,因此可以使客户程序能访问那些根文档目录之外的目录,这在增加了灵活性的同时但减少了安全性。Apache在目录的访问控制中提供了FollowSymLinks选项来打开或关闭支持符号连接的特性。

   Options FollowSymLinks
   AllowOverride None

  Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。

  Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。

  由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。

   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all

  这里定义的是系统对外发布文档的目录的访问设置,设置不同的 AllowOverride选项,以定义配置文件中的目录设置和用户目录下的安全控制文件的关系,而Options选项用于定义该目录的特性。

  配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用AllowOverride参数进行设置,通常可以设置的值为:

AllowOverride的设置  对每个目录访问控制文件作用的影响
-------------------  ---------------------------------
All                  缺省值,使访问控制文件可以覆盖系统配置
None                 服务器忽略访问控制文件的设置
Options              允许访问控制文件中可以使用Options参数定义目录的选项
FileInfo             允许访问控制文件中可以使用AddType等参数设置
AuthConfig           允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 Limit 允许对访问目录的客户机的IP地址和名字进行限制

  每个目录具备一定属性,可以使用Options来控制这个目录下的一些访问特性设置,以下为常用的特性选项:

Options设置          服务器特性设置
-----------          -------------------
All                  所有的目录特性都有效,这是缺省状态
None                 所有的目录特性都无效
FollowSymLinks       允许使用符号连接,这将使浏览器有可能访问文档根目录 (DocumentRoot)之外的文档 SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性ExecCGI 允许这个目录下可以执行CGI程序 Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表

 此外,上例中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和 IP地址来控制访问的一种方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则针对名字或IP进行访问控制设置,上例使用allowfrom all,表示允许所有的客户机访问这个目录,而不进行任何限制。

  UserDir public_html

  当在一台Linux上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如 http://example.org.cn/~user,使用波浪符号加上用户名就可以映射到用户自己的网页目录上。映射目录为用户个人主目录下的一个子目录,其名字就用UseDir这个参数进行定义,缺省为public_html。如果不想为正式的用户提供网页服务,使用DISABLED作UserDir的参数即可。

#
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#
# Order allow,deny
# Allow from all
#
#
# Order deny,allow
# Deny from all
#
#

  这里可以看到Directory的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要Apache服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制。

  这里可以看到另外一个语句Limit,Limit语句就是用来针对具体的请求方法来设定访问控制的,其中可以使用GET、POST等各种服务器支持的请求方法做Limit的参数,来设定对不同请求方法的访问限制。一般可以打开对GET、POST、 HEAD三种请求方法,而屏蔽其他的请求方法,以增加安全性。Limit语句中,可以用Order 、Allow、Deny,Allow和Deny中可以使用匹配的方法针对域名和IP进行限制,只是对于域名是从后向前匹配,对于IP地址则从前向后匹配。

  DirectoryIndex index.html

  很多情况下,URL中并没有指定文档的名字,而只是给出了一个目录名。那么Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件,当然可以指定多个文件名字,系统会这个目录下顺序搜索。当所有由DirectoryIndex指定的文件都不存在时,Apache服务器可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项中的Indexes选项(Options Indexes )必须打开,以使得服务器能够生成目录列表,否则Apache将拒绝访问。

  AccessFileName .htaccess

  AccessFileName定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件,来改变不同目录的访问控制限制。

Order allow,deny
Deny from all

  除了可以针对目录进行访问控制之外,还可以根据文件来设置访问控制,这就是File语句的任务。使用File 语句,不管文件处于哪个目录,只要名字匹配, 就必须接受相应的访问控制。这个语句对于系统安全比较重要,例如上例将屏蔽所有的使用者不能访问.htaccess文件,这样就避免.htaccess中的关键安全信息不至于被客户获取。

  #CacheNegotiatedDocs

  缺省情况下如果代理服务器和Apache服务器协商是否缓存其网页,Apache给予否定的回答,不希望自己的网页被代理服务器缓存。然而这样就不能有效的利用代理服务器的优势,因此可以设置CacheNegotiatieDocs 选项, 使得代理服务器可以对网页进行缓存。然而即使不设置这个选项,有的代理服务器(或通过调整设置)也能对网页进行缓存。

  UseCanonicalName On

  打开这个UseCanonicalName是Web服务器的标准做法,因为客户发送的大部分请求都是对本服务器的引用,这样服务器就能使用ServerName和Port选项的设置内容构建完整的URL,并回应客户,使浏览器能得到规范的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器的名字和端口值(支持HTTP 1.1的客户的请求中将会有这些信息),重新构建URL。

  TypesConfig /usr/local/apache/etc/mime.types

  TypeConfig用于设置保存有不同的MIME类型数据的文件名,在Linux下缺省设置为/usr/local/apache/etc/mime.types。

  DefaultType text/plain

  如果Web服务器不能决定一个文档的缺省类型,这通常表示文档使用了非标准的后缀,那么服务器就使用 DefaultType定义的MIME类型将文档发送给客户浏览器。这里的设置为text/plain,这样设置的问题是,如果服务器不能判断出文档的MIME,那么大部分情况下这个文档为一个二进制文档,但使用 text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。因此建议将这个设置更改为application/octet-stream,这样浏览器将提示用户进行保存。

   MIMEMagicFile /usr/local/apache/etc/magic

  除了从文件的后缀出发来判断文件的MIME类型之外,Apache还可以进一步分析文件的一些特征,来判断文件的真实MIME类型。这个功能是由mod_mime_magic 模块实现的,它需要一个记录各种MIME类型特征的文件,以进行分析判断。上面的设置是一个条件语句,如果载入了这个模块,就必须指定相应的标志文件magic的位置。

  通常连接时,服务器仅仅可以得到客户机的IP地址,如果要想获得客户机的主机名,以进行日志记录和提供给 CGI程序使用,就需要使用这个HostnameLookups 选项,将其设置为On打开DNS反查功能。但是这将使服务器对每次客户请求都进行DNS查询,增加了系统开销,使得反应变慢,因此缺省设置为使用Off关闭此选项。关闭选项之后,服务器就不会获得客户机的主机名,而只能使用IP地址来记录客户。

ErrorLog /var/log/httpd-error.log
LogLevel warn
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent} "" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#CustomLog /var/log/httpd-access.log common
#CustomLog /var/log/httpd-referer.log referer
#CustomLog /var/log/httpd-agent.log agent
CustomLog /var/log/httpd-access.log combined 

  这里定义了系统日志的形式,对于服务器错误记录, 由ErrorLog、 LogLevel 来定义不同的错误日志文件及其记录内容。

  对于系统的访问日志,缺省使用CustomLog参数定义日志的位置,缺省使用 combined 参数指定将所有的访问日志放在一个文件中,然而也可以将不同种类的访问日志放在不同的日志记录文件中,这是通过在 CustomLog中指定不同的记录类型来完成的。common表示普通的对单页面请求访问记录,referer表示每个页面的引用记录,可以看出一个页面中包含的请求数,agent表示对客户机的类型记录,显然可以将现有的combined 定义的设置行注释掉,并使用common、referer和agent作为CustomLog的参数,来为不同种类的日志分别指定日志记录文件。

  显然,LogFormat是用于定义不同类型的日志进行记录时使用的格式, 这里使用了以%开头的宏定义,以记录不同的内容。

  如果这些参数指定的文件使用的是相对路径,那么就是相对于ServerRoot的路径。

  ServerSignature On

  一些情况下,例如当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息。有的管理员更倾向于不对外显示这些信息,就可以将这个参数设置为Off,或者设置为Email,最后一行将替换为对 ServerAdmin 的Email提示。

Alias /icons/ "/www/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all 

  Alias参数用于将URL与服务器文件系统中的真实位置进行直接映射,一般的文档将在DocumentRoot 中进行查询,然而使用Alias定义的路径将直接映射到相应目录下,而不再到DocumentRoot 下面进行查询。因此Alias可以用来映射一些公用文件的路径,例如保存了各种常用图标的icons路径。这样使得除了使用符号连接之外,文档根目录(DocumentRoot)外的目录也可以通过使用了Alias映射,提供给浏览器访问。

  定义好映射的路径之后,应该需要使用Directory语句设置访问限制。

ScriptAlias /cgi-bin/ "/www/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all

  ScriptAlias也是用于URL路径的映射,但与Alias的不同在于,ScriptAlias 是用于映射CGI程序的路径,这个路径下的文件都被定义为CGI程序,通过执行它们来获得结果,而非由服务器直接返回其内容。缺省情况下CGI程序使用cgi-bin目录作为虚拟路径。

  # Redirect old-URI new-URL

  Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档,改变了位置之后,而又希望能使用老URL能访问到,以保持与以前的URL兼容。

IndexOptions FancyIndexing
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 .ci
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 /icons/unknown.gif
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

   当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件。但如果一个目录中不存在缺省的索引文件,并且该服务器又许可显示目录文件列表的时候,就会显示出这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前面的这些设置参数。

   如果使用了IndexOptions FancyIndexing选项,可以让服务器产生的目录列表中针对各种不同类型的文档引用各种图标。而哪种文件使用哪种图标,则使用下面的 AddIconByEncoding、AddIconByType以及AddIcon来定义,分别依据MIME 的编码、类型以及文件的后缀来判断使用何种图标。如果不能确定文档使用的图标,就使用 DefaultIcon定义的缺省图标。

  同样,使用AddDescription可以为不同类型的文档加入不同的描述。并且,服务器还在目录下,查询使用ReadmeName和HeaderName定义的文件(自动加上 .html后缀,如果没有发现,再使用.txt后缀进行搜索),如果发现了这些文件,就在文件列表之前首先显示这些文件的内容,以使得普通目录列表具备更大的可理解性。

  IndexIgnore让服务器在列出文件列表时忽略相应的文件, 这里使用模式配置的方式定义文件名。

   AddEncoding x-compress Z
   AddEncoding x-gzip gz

  AddEncoding用于告诉一些使用压缩的MIME类型,这样可以让浏览器进行解压缩操作。

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de 

  一个HTML文档可以同时具备多个语言的版本,如对于file1.html文档可以具备file1.html.en、file1.html.fr 等不同的版本,每个语言后缀必须使用 AddLanguage进行定义。这样服务器可以针对不同国家的客户,通过与浏览器进行协商,发送不同的语言版本。而LanguagePriority 定义不同语言的优先级,以便在浏览器没有特殊要求时,按照顺序使用不同的语言版本回应对file1.html 的请求。

   这个国际化的能力实际的应用并不多。

#AddType application/x-httpd-php .phtml
#AddType application/x-httpd-php-source .phps

 AddType参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖 mime.types中的设置。

  #AddHandler cgi-script .cgi

  AddHandler是用于指定非静态的处理类型,用于定义文档为一个非静态的文档类型,需要进行处理,再向浏览器返回处理结果。例如上面注释中的设置是将以.cgi结尾的文件设置为cgi-script类型,那么服务器将启动这个CGI程序以进行处理。如果需要在前面AliasScript定义的路径之外执行CGI程序,就需要使用这个参数进行设置,此后以.cgi结尾的文件将被当作CGI程序执行。

  在配置文件、这个目录中的.htaccess以及其上级目录的.htaccess中必须允许执行CGI程序,这需要通过Options ExecCGI参数设定。

#AddType text/html .shtml
#AddHandler server-parsed .shtml

  另外一种动态进行处理的类型为server-parsed,由服务器自身预先分析网页内的标记,将标记更改为正确的HTML标识。由于server-parsed需要对text/html 类型的文档进行处理,因此首先定义了对应的.shtml为text/html类型。

  然而要支持SSI,还要首先要在配置文件(或.htaccess)中使用Options Includes允许该目录下的文档可以为SSI类型,或使用Options IncludesNOExec让执行普通的SSI标志,但不执行其中引用的外部程序。

  另一种指定server-parsed类型的方式为使用XBitBack设置选项,如果将 XBitHack设置为On,服务器将检查所有text/html类型的文档(包括.html后缀的文档),如果发现文件属性具备执行位 “x",则服务器就认为它是服务器分析文档,需要服务器进行处理。推荐使用AddHandler进行设置,而将XBitBack 设置为Off,因为使用XBitBack将对所有的HTML文档都执行额外的检查,降低了效率。

#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var

上面被注释的AddHandler用于支持Apache服务器的asis、map和var处理能力。

# Action media/type /cgi-script/location
# Action handler-name /cgi-script/location

 因为Apache内部提供的处理功能有限,因此可以使用Action为服务器定义外部程序作为可处理的动态文档类型,这些外部程序与标准CGI程序相同,都是对输入的数据处理之后,再输出不同MIME类型的结果。例如要定义一个对特殊后缀wri都先执行wri2txt进行处理操作,再返回结果的操作,可以使用:

Action windows-writer /bin/wri2txt
AddHandler windows-writer wri

 更进一步,可以直接使用Action定义对某个MIME类型预先进行处理操作,这需要例子中第一种格式的Action 参数设置方式。这样设置方式就不再需要额外的AddHandler用来将处理操作与文件后缀联系起来,而是使用Action直接处理MIME类型的文件。但如果文档后缀没有正式的MIME类型,还需要先定义一个MIME类型。

#MetaDir .web
#MetaSuffix .meta

 Meta信息是在文档发送给客户之前,预先发送给客户浏览器一些数据,因此浏览器可以通过HEAD请求来访问这些Meta信息而不必真正通过GET来返回全部文档数据。服务器通常发送给浏览器的是一些标准的HTTP头信息,如果要想增加额外的信息,就需要使用MetaDir来定义Meta数据存放的目录, 而MetaS uffix用于指定包含Meta数据的文件后缀。

#ErrorDocument 500 "The server made a boo boo.
#ErrorDocument 404 /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#ErrorDocument 402 http://some.other_server.com/subscription_info.htm...

  如果客户请求的网页不存在,或者没有访问权限等情况发生时,服务器将产生一个错误代码,同时也将回应客户浏览器一个标识错误的网页。

   ErrorDocument就用于设置当出现哪个错误时应该回应客户浏览器那些内容,ErrorDocument的第一个参数为错误的序号,第二个参数为回应的数据,可以为简单的文本,本地网页,本地CGI程序,以及远程主机上的网页。

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

 BrowserMatch命令为特定的客户程序,设置特殊的参数,以保证对老版本浏览器的兼容性,并支持新浏览器的新特性。

#
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#

   用于设置访问控制的设置主要是针对目录和文件进行设置的,然而也可以针对不同的URL进行访问控制的设置,这样就不必担心ScriptAlias、Alias是否将路径设置到了受控制的目录之外了。针对URL进行控制的语句为 Location语句,这样不但能对服务器上的文件、CGI提供保护,此外,它还能保护不能找到对应文件,而是由服务器本身提供的特殊功能URL。http://servername/server-status用于报告当前Apache服务器的状态,http://servername/server-info用于报告Apache 服务器的统计信息。与此相关的设置还有ExtendedStatus参数,可以让服务器输出更详细的的报告。

#
#ProxyRequests On
#
#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#ProxyVia On
#CacheRoot "/www/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
# 

  Apache服务器本身就具备代理的功能,然而这要求加载入mod_proxy模块。这能使用IfModule语句进行判断,如果存在mod_proxy模块,就使用ProxyRequests打开代理支持。此后的Directory用于设置对Proxy功能的访问权限设置,以及用于设置缓冲的各个参数设置。

虚拟主机

#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# ServerAdmin webmaster@host.some_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common
#
# 

  缺省设置文件中的这些内容是用于设置命名基础的虚拟主机服务器时使用。

   其中NameVirtualHost 来指定虚拟主机使用的IP地址,这个IP地址将对应多个 DNS名字,如果Apache使用了Listen 参数控制了多个端口,那么就可以在这里加上端口号以进一步进行区分对不同端口的不同连接请求。此后,使用 VirtualHost 语句,使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应的虚拟主机设置。

  虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构及设置,这样域名之间完全独立,不但使用每个域名访问到的内容完全独立,并且使用另一个域名无法访问其他域名提供的网页内容。

  虚拟主机的概念对于ISP来讲非常有用,因为虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级往址上,但使用独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个单独的服务器,很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。

  有两种设定虚拟主机的方式,一种是基于HTTP 1.0标准,需要一个具备多IP地址的服务器,再配置DNS 服务器,给每个IP地址以不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。

  可以在一个网络界面上绑定多个IP地址,Linux下需要使用ifconfig的 alias参数来进行这个配置,但此时会影响网络性能。

  HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏览器请求的是哪个主机名字。因此可以利用这个新特性,使用更轻松的方式设定虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的标准方式。

  要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,为服务器增加多个C NAME选项,如:

linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux

  基本的设置选项都是为了linux主机设定的,如果要为vhost1和vhost2设定虚拟主机,就要使用VirtualHost语句定义不同的选项,在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。

NameVirtualHost 192.168.1.64
DocumentRoot /www/data
ServerName linux.example.org.cn
DocumentRoot /vhost1
ServerName vhost1.example.org.cn
DocumentRoot /vhost2
ServerName vhost2.example.org.cn

  这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义的地址相一致,必须保证所有的值严格一致,Apache服务器才承认这些定义是为这个IP地址定义的虚拟主机。

  此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。


防患于未然:如何防止论坛被挂马

患于未然:如何防止论坛被挂马

针对Discuz。

看到近来有不少朋友的论坛被上传木马,这里我提供一些我自己的心得。
本文的环境为FreeBSD 4.11,MySQL 4.0.23a,PHP 4.3.11+Zend,Apache 2.0.52
PHP的配置文件:/usr/local/Zend/etc/php.ini
MySQL的配置文件:/etc/my.cnf
Apache的配置文件:/usr/local/etc/apache2/httpd.conf
所有网站都放在/www
Discuz!放在/www/discuz

1)首先来配置php.ini


CODE:
[Copy to clipboard]  
# ee /usr/local/Zend/etc/php.ini



ctrl+y查找:disable_functions
找到后在=后面添加


CODE:
[Copy to clipboard]  
exec,system,passthru,error_log,ini_alter,dl,openlog,syslog,readlink,symlink,link,leak,fsockopen,
proc_open,popepassthru,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,popen



上面内容请放到一行。因为保持帖子的整体效果作了换行
这里都是禁止在php里面执行的函数

查找:display_errors
如果是On的话改成Off

查找:magic_quotes_gpc
如果是Off的话改成On

查找:register_globals
如果是On的话改成Off

查找:open_basedir
后面增加
/www/:/tmp/
这里是限制php可以访问的目录,后面一定要加上/,否则如果有/wwwabcd这个目录也会被访问得到
多个目录用英文:分隔。如果不添加/tmp/的话Discuz!的上传功能就无法使用
注意:以上内容在php.ini的开头会有相关设置的提示,请按ctrl+x查找下一个,不要直接在上面修改

OK,保存退出
(ee的搜索是向后,如果发现某个词语搜索不到可以使用快捷键ctrl+t回到文档起始)

2)MySQL的安全设置
打开/etc/my.cnf。如果没有的话可以到/usr/local/share/mysql下面cp一个


CODE:
[Copy to clipboard]  
#cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf



编辑my.cnf


CODE:
[Copy to clipboard]  
#ee /etc/my.cnf



找到
[mysqld]

myisam_sort_buffer_size = 8M
后面添加


CODE:
[Copy to clipboard]  
set-variable=local-infile=0
set-variable=max_connections=9000        #这个功能是设置最大的同时连接数,与安全无关,优化而已



//// 可选设置
把mysql的root改名


CODE:
[Copy to clipboard]  
# mysql -uroot -p



按提示输入密码


CODE:
[Copy to clipboard]  
mysql>use mysql;
mysql>update user set user="newroot" where user="root";
mysql>flush privileges;
mysql>exit



这样就把mysql的root改成newroot了


3)改一下httpd.conf


CODE:
[Copy to clipboard]  
#ee /usr/local/etc/apache2/httpd.conf



去掉不需要的mod。其他的不说了,关键几个如下:


 CODE:
[Copy to clipboard]  
#LoadModule cgi_module libexec/apache2/mod_cgi.so
#LoadModule userdir_module libexec/apache2/mod_userdir.so



在前面添加#禁止加载

把从
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"

<Directory "/usr/local/www/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>
全部在前面加上#注释掉

在文件的最后对应的VirtualHost中增加


CODE:
[Copy to clipboard]  
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
php_admin_value open_basedir "/www/discuz/:/var/tmp/"



前面三行是对Trace和Track请求的处理,最后一句是对php打开的目录作限制


4)Discuz!目录安全设置
首先建立一个密码文件


CODE:
[Copy to clipboard]  
# touch /www/.discuzpass



建立用户dzadmin


CODE:
[Copy to clipboard]  
# htpasswd /www/.discuzpass dzadmin



按照提示输入两遍密码

完成用户创建后,在discuz!的目录里面建立一个.htaccess文件,里面的内容如下:


CODE:
[Copy to clipboard]  
<Files admincp.php>
AuthUserFile /www/.discuzpass        #密码文件存放位置
AuthName "Login pls"
AuthType Basic
require user dzadmin        #需要验证用户为dzadmin
</Files>
<Files config.php>
AuthUserFile /www/.discuzpass
AuthName "Login pls"
AuthType Basic
require user dzadmin
</Files>



设置后从Web访问admincp.php和config.php必须要输入正确的账号和密码

进入attachments、customavatars目录,建立.htaccess,里面的内容为:

CODE:
[Copy to clipboard]  
php_flag engine off



设置后在附件和用户自定义头像目录就无法执行php文件了。就算discuz!有上传文件的漏洞,被传了webshell,在打开的时候也只是提示下载文件,而不是直接运行。

在其他的敏感目录,比如admin、forumdata、templates等目录,我们可以完全禁止用户的访问。同理,建立一个.htaccess,内容如下:


CODE:
[Copy to clipboard]  
Options -Indexes
Options +FollowSymLinks
Options -ExecCGI

order deny,allow
deny from all



最后,对templates目录里面的模板全部chmod 644,只有所有者能写,其他用户为只读


通过以上的设置,你的Discuz!已经相对安全了,偷笑一下吧。
经过我的测试,基本市面上的webshell都无效,包括最新的phpspy 2006,也只能在授权目录下面访问。
以上设置针对FreeBSD环境、Apache服务器。其他*nix和Win环境可以参考修改。
以上内容如有任何错误,欢迎大家的指出。
Win2003 与 Win2000磁盘权限设置不是完全相同的,win2000下的磁盘权限设置方式不能用在win2003下,特别是系统盘那条“系统盘及所有磁盘只给 Administrators 组和 SYSTEM 的完全控制权限” 在win2003下是错误的,look老兄的问题就是出在这里。
 2.如果是系统盘权写设置出了问题,不用一个一个重新设置(这样麻烦)或重做系统,告诉大家2003下面的一个恢复权限默认属性的命令 secedit  具体使用方法 F1里面有。如果看不懂可以来问我。
 3.恢复默认之后如果还出问题,如look老兄的 “请求的资源在使用中”
可以这样解决 regsvr32 jscript.dll  (命令功能:修复Java动态链接库)regsvr32 v bscript.dll  (命令功能:修复VB动态链接库)
  如果还有其他无法运行asp,你看看是不是以前你删掉了那个不该删的组件 将他们重新注册就好了
在开始---运行中重新注册这些组件:  

regsvr32 actxprxy.dll   ,

regsvr32 shdocvw.dll,

regsvr32 mshtml.dll,

regsvr32 urlmon.dll,

regsvr32 msjava.dll,

regsvr32 browseui.dll,

regsvr32 oleaut32.dll,

regsvr32 shell32.dll,

然后重新启动下系统

如果还不行,就给他打补丁 sp1. 打过补丁的可以再打一遍   (look老兄的最终就是这么解决的)

分页: 8/26 第一页 上页 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表 ]