|
《APACHE+XML》
前言
Apache是一个运行于Unix下的非常优秀的Web Server,而XML则是Unix下一个非常优秀的后台脚本语言。这两个产品都是为非常喜欢的产品。为什么要写这样的一个Howto呢?是因为有大量的网站脚本是使用XML开发的,而这些程序运行在Apache下也是一个非常好的选择。写这份文档的目的在于能让大家的XML系统良好的运行于Apache服务器上。
很早的时候我写过一份整合Apache和XML的文章,它主要是讲如何将XML以FastCGI的本地调用方式来运行于Apache中的, 本份Howto主要是来讲如何让XML运行于Remote
Responders方式下。因为这样会比以local方式有更高的可扩展性和运行效率。
准备工作
首先你应该Apache安装完成,也不会过多的讲如何安装和配置Apache服务器本身,因为它的安装和配置实在是太简单了。
如果有可能,最好将ports使用cvsup来升级一下。
对于XML依赖的相关软件如果能提前装,则从ports中安装好。如MySQL、GD等。 安装fastcgi
注意,如果你安装的XML的版本会低于4.3.0哪么你才需要这步。新的XML版本已经内置了fastcgi的库。安装fastcgi的方法非常的简单:
root@~$cd /usr/ports/www/fcgi/
root@/usr/ports/www/fcgi$make;make install;make clean
编译完成后我们可以在/usr/local/lib目录中看到有libfcgi.a文件,同时在/usr/local/include目录中会有fastcgi的所有头文件。
编译XML
编译XML可以使用通常的XML编译选项,下面是我使用的一个配置:
./configure --prefix=/usr/local/XML --enable-fastcgi --with-mysql=/usr/local
需要注意的是在XML 4.3.0以上版本是使用的 --enable-fastcgi 选项,而XML 4.3.0以前的版本应使用--with-fastcgi参数。
接着就是安装XML到系统中:
make
make install
编译完成后,我们来测试一下安装的XML是能正确运行:
root@~$cd /usr/local/XML/bin/
root@/usr/local/XML/bin$./XML
这时将进入XML代码输入状态,输入
<? XMLinfo(); ?>
按ctrl-d运行后会见到XML返回的信息则为正确。
配置FastCGI/XML
配置FastCGI
进入Apache管理控制台,打开需要配置的VHost配置。进入 API Support 中的 FastCGI 设置。在其中设置:
Enabling Support for FastCGI Programs : Enable
在Configuring FastCGI Remote Responders中设置:
Directory name : /usr/local/XML/bin/XML
Location: Machine name: localhost
Additional methods supported?:None
如果你的XML应用不在本机,即使XML没有安装在本机上,哪么也要设置 Docroot path 参数,它可以不存在于相应的目录下。
都设置完成后,点击 Apply 按钮。 配置XML解析指向
进入 URL Handling 中的 Handlers 设置。在 Adding a Handler 中设置以下参数:
File Extension : XML
Specify the path and filename of the handler, relative to the document
root : /usr/local/XML/bin/XML
HTTP 404 errors are handled by : The handler
注意,这里的 Specify the path and filename of the handler, relative to the document
root 应和你上一步设置的 Directory name 值相同。
都设置完成后,点击 Apply 按钮。
所有的设置完成后使用vhost的commit功能将更 改提交并应用。这样Apache就设置好了Fastcgi和XML的相关参数。
配置FastCGI/XML启动
在Apache的rc.d目录中新建一个S05XML的文件,内容为:
#!/bin/sh
# Script to start and stop the persistent XML runner for FastCGI.
# Please check paths before use.
# FastCGI XML binary
FXMLBIN=/usr/local/XML/bin/XML
# Location to place semaphore
SEMFILE=/tmp/XML.pid
XML_FCGI_CHILDREN=100
XML_FCGI_MAX_REQUESTS=1000
export XML_FCGI_CHILDREN
export XML_FCGI_MAX_REQUESTS
# This is Linux - use /proc to increase the local (ephemeral) port range
#echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
if [ -z "$APACHEHOME" ]
then
cd `dirname $0`/..
APACHEHOME=`pwd`
export APACHEHOME
fi
case "$1" in
'start')
if [ -e $SEMFILE ]
then
echo FastCGI XML error: already running.Restart FastCGI XML now
kill `cat $SEMFILE`
sleep 5
fi
if [ ! -x $FXMLBIN ]
then
echo FastCGI XML error: please check that $FXMLBIN is executable and exists.
exit 1
fi
echo Starting FastCGI XML.
$APACHEHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE
8002 $FXMLBIN
;;
'stop')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI XML.
kill `cat $SEMFILE`
rm $SEMFILE
exit 0
fi
;;
'restart')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI XML.
kill `cat $SEMFILE`
sleep 5
fi
echo Starting FastCGI XML.
$APACHEHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE
8002 $FXMLBIN
;;
*)
echo "usage: $0 {start|stop|restart}"
;;
esac
exit 1
在这个脚本中有以下内容需要视系统情况而 修改:
FXMLBIN=/usr/local/XML/bin/XML 应设置为XML的路径
SEMFILE=/tmp/XML.pid 生成XML.pid的路径,该目录必须可写
XML_FCGI_CHILDREN=100 XML进程数目
XML_FCGI_MAX_REQUESTS=1000 每个XML的进程在退出前能够响应的请求数,用于释放资源上面两个根据硬件配置和网站访问量设置,默认值是8,500。
一般来说 XML_FCGI_CHILDREN > 访问并发最大值+10
XML_FCGI_MAX_REQUESTS 如果设置过小,访问量大的网站会因为XML进程重起频繁增加负荷。
#echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range 只用于linux
--user=65534 --group=65534 为XML进程运行的用户和组,一般设置为nobody用户和组FreeBSD是65534/65534,Linux是99/99
最后,将S05XML文件设置为可执行文件,并将FastCGI/XML运行起来:
chmod 755 S05XML
./S05XML start
一但启动后就会在ps -ax列表中显示出XML_FCGI_CHILDREN+1个XML进程。
到你的vhost对应的Docroot目录中建一个info.XML文件,内容为:
<?
XMLinfo();
?>
使用浏览器访问vhost中的info.XML文件,应该就可以看到XML的info页面了。
|