apache-mod_layout的使用 [原创]

| |
[不指定 2010/06/17 17:07 | by 张明辉 ]
什么是SSI ?
SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
至于什么时候应当用SSI ,而什么时候应当用某些程序生成整个页面,取决于页面中有多少内容是静态的,又有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段动态信息的好方法,比如当前时间。如果你的页面大部分内容是在被提供时动态生成的,那就要另找方案了.


以上是apache 官方的解释,而在apache 里面的实现就是通过mod_include模块实现.要使服务器允许SSI,必须在httpd.conf或.htaccess文件中有如下配置:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml    ####声明那些文件后缀使用ssi
Options +Includes                           ####启用ssi指令

首先我们分析下ssi原理和设置:
     1:全文式的搜索文件内容来寻找源码的Include标签,消耗大量cpu资源
     2:而大量的html文件是不经常更改的,所以无法随意的修改文件后缀(shml),尽管我可以更改如下:
     AddType text/html .shtml html
     AddOutputFilter INCLUDES .shtml html
     但是我其他没有include标签的html似乎很无辜!
     3:通过设置"XBitHack on“似乎能解决一些问题,但也仅仅是杯水车薪。
     当然ssi对系统性能的影响完全大于我们对他的需求
     今天的web不是几年前的web那么简单,不是几个简单的html就能搞定的事,大量内容的发布似拖动了整个页面的更新.往往这些更新只是局部的,这样的开销开销似乎很不合算.SSi就是满足了我们这点.
那有没有更简单的方式实现服务器端包含呢?
答案是有的!

今天我们介绍通过apache的第三方模块实现对现有HTML文档增加动态内容的方法
mod_layout
mod_layout(http://tangent.org/362/mod_layout.html)是一个Apache模块,它支持html网页内容自动插入来自其他URL或者文件输出的内容来子作为指定网页的页眉和页脚。目前支持mod_perl,PHP 和 Apache JServ.和几乎任何类型的处理程序


据我了解sina就是使用mod_layout!

[root@node2 extra]# curl --head www.sina.com.cn
HTTP/1.0 200 OK
Date: Thu, 17 Jun 2010 08:22:02 GMT
Server: Apache/2.0.54 (Unix)
Last-Modified: Thu, 17 Jun 2010 08:21:00 GMT
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markIII.remix
Cache-Control: max-age=60
Expires: Thu, 17 Jun 2010 08:23:02 GMT
Vary: Accept-Encoding
X-UA-Compatible: IE=EmulateIE7
Content-Type: text/html
Age: 48
Content-Length: 555586
X-Cache: HIT from sh201-20.sina.com.cn
Connection: close

[root@node2 extra]# curl --head http://sh.house.sina.com.cn/
HTTP/1.1 200 OK
Date: Thu, 17 Jun 2010 08:29:36 GMT
Server: Apache/2.2.6 (Unix)
Last-Modified: Thu, 17 Jun 2010 08:18:35 GMT
Accept-Ranges: bytes
Cache-Control: max-age=1800
Expires: Thu, 17 Jun 2010 08:59:36 GMT
X-Powered-By: ModLayout/5.1
Vary: Accept-Encoding
Connection: close
Content-Type: text/html

INSTALL步骤如下:
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Server version: Apache/2.2.11 (Unix)
我的apache安装在/opt/app/apache(根据自己的编译环境选择)

软件下载:
wget http://fetus.k-hsu.net/document/webmaster/diary2/binary/20060315_modlayout.tar.gz
apache的安装省略!

引用
[root@node2 httpd-2.2.14]# tar -zxvf 20060315_modlayout.tar.gz
mod_layout/
mod_layout/mod_layout-4.0.1a/
mod_layout/mod_layout-4.0.1a/Makefile
.................
.................
mod_layout/mod_layout-4.0.1a/ChangeLog
mod_layout/mod_layout-4.0.1a/modules.mk
mod_layout/liblayout.so
[root@node2 httpd-2.2.14]# cd mod_layout/
[root@node2 mod_layout]# ls
liblayout.so  mod_layout-4.0.1a
[root@node2 mod_layout]# cd mod_layout-4.0.1a/
[root@node2 mod_layout-4.0.1a]# ls
ChangeLog     layout.c   layout.o      Makefile           mod_layout.h       mod_layout.lo   modules.mk     proto.h    utility.la  utility.slo
directives.h  layout.la  layout.slo    mod_layout.c       mod_layout.h.orig  mod_layout.o    patches        README     utility.lo  version.h
INSTALL       layout.lo  liblayout.la  mod_layout.c.orig  mod_layout.la      mod_layout.slo  protobuild.pl  utility.c  utility.o
[root@node2 mod_layout-4.0.1a]# vi Makefile

修改完成后保存退出
[root@node2 mod_layout-4.0.1a]# make
/opt/app/apache2/bin/apxs -c mod_layout.c
//opt/app/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I//opt/app/apache2/include  -I//opt/app/apache2/include   -I//opt/app/apache2/include   -c -o mod_layout.lo mod_layout.c && touch mod_layout.slo
//opt/app/apache2/build/libtool --silent --mode=link gcc -o mod_layout.la  -rpath //opt/app/apache2/modules -module -avoid-version    mod_layout.lo
/opt/app/apache2/bin/apxs -c utility.c
//opt/app/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I//opt/app/apache2/include  -I//opt/app/apache2/include   -I//opt/app/apache2/include   -c -o utility.lo utility.c && touch utility.slo
//opt/app/apache2/build/libtool --silent --mode=link gcc -o utility.la  -rpath //opt/app/apache2/modules -module -avoid-version    utility.lo
/opt/app/apache2/bin/apxs -c layout.c
//opt/app/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I//opt/app/apache2/include  -I//opt/app/apache2/include   -I//opt/app/apache2/include   -c -o layout.lo layout.c && touch layout.slo
//opt/app/apache2/build/libtool --silent --mode=link gcc -o layout.la  -rpath //opt/app/apache2/modules -module -avoid-version    layout.lo
/opt/app/apache2/bin/apxs -o liblayout.la -c mod_layout.lo utility.lo layout.lo
//opt/app/apache2/build/libtool --silent --mode=link gcc -o liblayout.la  -rpath //opt/app/apache2/modules -module -avoid-version    mod_layout.lo utility.lo layout.lo
#/opt/app/apache2/bin/apxs -c -o liblayout mod_layout.lo utility.lo layout.lo
#/opt/app/apache2/bin/apxs -i -a mod_layout.la
[root@node2 mod_layout-4.0.1a]# make install
make[1]: Entering directory `/opt/app/mod_layout/mod_layout-4.0.1a'
//opt/app/apache2/build/libtool --silent --mode=install cp mod_layout.la //opt/app/apache2/modules/
make[1]: Leaving directory `/opt/app/mod_layout/mod_layout-4.0.1a'
..............
...........
.......
chmod 755 //opt/app/apache2/modules/liblayout.so
+--------------------------------------------------------+
| All done.                                              |
|                                                        |
| You will need to add the directive:                    |
| LoadModule layout_module modules/liblayout.so          |
|                                                        |
| So that you can begin to use mod_layout.               |
|                                                        |
| Thanks for installing mod_layout.                      |
+--------------------------------------------------------+

出现以上,证明安装没有问题
确保http.conf 配置文件里面有这行:

LoadModule layout_module modules/liblayout.so

#############################################################
建立一个虚拟主机测试:

###############################################################
[root@node2 mod_layout-4.0.1a] echo "header" > /var/www/html/header.html
[root@node2 mod_layout-4.0.1a] echo "footer" > /var/www/html/footer.html

完成!
工作笔记 | 评论(0) | 引用(0) | 阅读(154)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]