在Zeus Web Server中安装PHP语言支持


Posted in PHP onOctober 09, 2006

前言
Zeus是一个运行于Unix下的非常优秀的Web Server,而PHP则是Unix下一个非常优秀的后台脚本语言。 这两个产品都是为非常喜欢的产品。为什么要写这样的一个Howto呢?是因为有大量的网站脚本是使用PHP开发的, 而这些程序运行在Zeus下也是一个非常好的选择。写这份文档的目的在于能让大家的PHP系统良好的运行于Zeus服务器上。
很早的时候我写过一份整合Zeus和PHP的文章,它主要是讲如何将PHP以FastCGI的本地调用方式来运行于Zeus中的, 本份Howto主要是来讲如何让PHP运行于Remote Responders方式下。因为这样会比以local方式有更高的可扩展性和运行效率。

准备工作
首先你应该Zeus安装完成,也不会过多的讲如何安装和配置Zeus服务器本身,因为它的安装和配置实在是太简单了。
如果有可能,最好将ports使用cvsup来升级一下。
对于PHP依赖的相关软件如果能提前装,则从ports中安装好。如MySQL、GD等。 安装fastcgi
注意,如果你安装的PHP的版本会低于4.3.0哪么你才需要这步。新的PHP版本已经内置了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的所有头文件。

 

编译PHP
编译PHP可以使用通常的PHP编译选项,下面是我使用的一个配置:

./configure --prefix=/usr/local/php --enable-fastcgi --with-mysql=/usr/local
需要注意的是在PHP 4.3.0以上版本是使用的 --enable-fastcgi 选项,而PHP 4.3.0以前的版本应使用--with-fastcgi参数。
接着就是安装PHP到系统中:
make
make install
编译完成后,我们来测试一下安装的php是能正确运行:

root@~$cd /usr/local/php/bin/
root@/usr/local/php/bin$./php
这时将进入php代码输入状态,输入

<? phpinfo(); ?>
按ctrl-d运行后会见到php返回的信息则为正确。

配置FastCGI/PHP
配置FastCGI
进入Zeus管理控制台,打开需要配置的VHost配置。进入 API Support 中的 FastCGI 设置。在其中设置:
Enabling Support for FastCGI Programs : Enable
在Configuring FastCGI Remote Responders中设置:
Directory name : /usr/local/php/bin/php
Location: Machine name: localhost
Additional methods supported?:None
如果你的PHP应用不在本机,即使PHP没有安装在本机上,哪么也要设置 Docroot path 参数,它可以不存在于相应的目录下。
都设置完成后,点击 Apply 按钮。 配置PHP解析指向
进入 URL Handling 中的 Handlers 设置。在 Adding a Handler 中设置以下参数:

File Extension : php
Specify the path and filename of the handler, relative to the document root : /usr/local/php/bin/php
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功能将更 改提交并应用。这样Zeus就设置好了Fastcgi和PHP的相关参数。

配置FastCGI/PHP启动
在Zeus的rc.d目录中新建一个S05php的文件,内容为:

#!/bin/sh

# Script to start and stop the persistent PHP runner for FastCGI.
# Please check paths before use.

# FastCGI PHP binary
FPHPBIN=/usr/local/php/bin/php

# Location to place semaphore
SEMFILE=/tmp/php.pid
PHP_FCGI_CHILDREN=100
PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_CHILDREN
export PHP_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 "$ZEUSHOME" ]
then
cd `dirname $0`/..
ZEUSHOME=`pwd`
export ZEUSHOME
fi

case "$1" in
'start')

if [ -e $SEMFILE ]
then
echo FastCGI PHP error: already running.Restart FastCGI PHP now
kill `cat $SEMFILE`
sleep 5
fi

if [ ! -x $FPHPBIN ]
then
echo FastCGI PHP error: please check that $FPHPBIN is executable and exists.
exit 1
fi

echo Starting FastCGI PHP.
$ZEUSHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE 8002 $FPHPBIN
;;

'stop')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI PHP.
kill `cat $SEMFILE`
rm $SEMFILE
exit 0
fi

'restart')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI PHP.
kill `cat $SEMFILE`
sleep 5
fi
echo Starting FastCGI PHP.
$ZEUSHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE 8002 $FPHPBIN

*)
echo "usage: $0 {start|stop|restart}"
;;

esac
exit 1

在这个脚本中有以下内容需要视系统情况而 修改:

FPHPBIN=/usr/local/php/bin/php 应设置为php的路径
SEMFILE=/tmp/php.pid 生成php.pid的路径,该目录必须可写
PHP_FCGI_CHILDREN=100 php进程数目
PHP_FCGI_MAX_REQUESTS=1000 每个php的进程在退出前能够响应的请求数,用于释放资源 上面两个根据硬件配置和网站访问量设置,默认值是8,500。 一般来说 PHP_FCGI_CHILDREN > 访问并发最大值+10
PHP_FCGI_MAX_REQUESTS 如果设置过小,访问量大的网站会因为php进程重起频繁增加负荷。
#echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range 只用于linux
--user=65534 --group=65534 为php进程运行的用户和组,一般设置为nobody用户和组FreeBSD是65534/65534,Linux是99/99
最后,将S05php文件设置为可执行文件,并将FastCGI/PHP运行起来:

chmod 755 S05php
./S05php start
一但启动后就会在ps -ax列表中显示出PHP_FCGI_CHILDREN+1个php进程。
到你的vhost对应的Docroot目录中建一个info.php文件,内容为:
<?
phpinfo();
?>
使用浏览器访问vhost中的info.php文件,应该就可以看到PHP的info页面了。

 

附注
感谢CCF的坛主hunreal写出的S05php脚本,它真的非常好用!
如果还有什么想了解的可以到 Zeus PHP支持 页得到更多的信息。

注:任何转载或摘抄请注明文章出处(中文FreeBSD用户组 http://www.cnfug.org)

 

PHP 相关文章推荐
PHP 采集获取指定网址的内容
Jan 05 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
smarty简单分页的实现方法
Oct 27 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
使用PHP模拟HTTP认证
Oct 09 #PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 #PHP
You might like
简单的过滤字符串中的HTML标记
2006/12/25 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
python线程池的实现实例
2013/11/18 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
python获取本机所有IP地址的方法
2018/12/26 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Django admin组件的使用
2020/10/24 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
销售自我评价
2013/10/22 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
感恩寄语大全
2014/04/11 职场文书
项目经理任命书范本
2014/06/05 职场文书
五好家庭事迹材料
2014/12/20 职场文书
元旦主持词开场白
2015/05/29 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书