linux上配置lighttpd+PHP+FastCGI实现web与应用分开

[quote]
robbin在这里([url=../../../../topic/43228?page=1]http://www.iteye.com/topic/43228?page=1[/url])讲到ror的配置,使用的也是lighttpd+fastcgi,但他没有讲到多机的负载均衡.

[url=http://robbin.iteye.com/blog/168989]http://robbin.iteye.com/blog/168989[/url],这里讲到一些,但也只是ror的,和php的还不一样。
[/quote]

首先:一台机器作为应用服务器(suse),一台作为web服务器(gentoo)。在suse上配置fastcgi+ php,然后在gentoo上配置lighttpd。
各个应用程序的编译安装就不说了,假定用户已经在两台机器上安装好了应用程序:web服务器上需要安装Lighttpd,应用程序服务器上需要安装lighttpd和php。为什么也需要安装lighttpd,是因为我们要是用他的spawn-fcgi程序(lighttpd web服务器用不到)。

这里详细说一下如何配置使gentoo上服务器使用suse上的fastcgi应用。

首先[b]配置suse,也就是应用服务器[/b]:
将Lighttpd安装文件中的doc目录下的spawn-fcgi.sh拷贝到/etc/init.d/目录中,修改某些路径:



SPAWNFCGI="/usr/sbin/spawn-fcgi" #//修改成自己机器中spawn-fcgi的路径
FCGIPROGRAM="/usr/local/php/bin/php-cgi" #//修改成本地php-cgi程序的路径
FCGI_WEB_SERVER_ADDRS="127.0.0.1,172.30.9.2" #//修改成web服务器的ip地址
USERID=wwwrun
GROUPID=www #//,修改成本地启动fastcgi的用户名和组



其他部分不需要修改即可执行,但是这个脚本只提供了启动的功能,不像使用/etc/init.d中的其他服务一样方便(提供start,stop,restart等参数),于是进行修改,最后结果:


#!/bin/bash

## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/sbin/spawn-fcgi"

## ABSOLUTE path to the PHP binary
FCGIPROGRAM="/usr/local/php/bin/php-cgi"

## TCP port to which to bind on localhost
FCGIPORT="1026"

## number of PHP children to spawn
PHP_FCGI_CHILDREN=10

## maximum number of requests a single PHP process can serve before it is restarted
PHP_FCGI_MAX_REQUESTS=1000

## IP addresses from which PHP should access server connections
FCGI_WEB_SERVER_ADDRS="127.0.0.1,172.30.9.2"

# allowed environment variables, separated by spaces
ALLOWED_ENV="ORACLE_HOME PATH USER"

## if this script is run as root, switch to the following user
USERID=wwwrun
GROUPID=www


################## no config below this line

case "$1" in
start)

if test x$PHP_FCGI_CHILDREN = x; then
PHP_FCGI_CHILDREN=5
fi

export PHP_FCGI_MAX_REQUESTS
export FCGI_WEB_SERVER_ADDRS

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

if test x$UID = x0; then
EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -u $USERID -g $GROUPID -C $PHP_FCGI_CHILDREN"
else
EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -C $PHP_FCGI_CHILDREN"
fi

# copy the allowed environment variables
E=

for i in $ALLOWED_ENV; do
E="$E $i=${!i}"
done

# clean the environment and set up a new one
env - $E $EX

echo "spawning success"
;;

stop)
killall -9 "php-cgi"
echo "spawn stoped"
;;
restart)
$0 stop
$0 start
echo "spawn restarted"
;;
*)
echo "Useage: " $0 " (start|stop|restart|help)"
;;
esac
exit 0



配置成功,/etc/init.d/spawn-fcgi.sh start启动

然后[b]开始配置web服务器[/b],编辑lighttpd的配置文件夹中的conf.d/mod_fastcgi.conf文件
添加如下:

fastcgi.server = (".php" => ("suse" => (
"host" => "172.30.206.81",
"port" => 1026,
"docroot" => "/srv/www/htdocs/fcgi"
)));
这里的docroot是应用服务器上php文件存放的路径。

注意:一定不要忘了在lighttpd配置目录中的modules.conf中将mod_fastcgi.conf前面的注释去掉,否则fastcgi不可用
然后启动lighttpd

这个时候在你应用服务器的/srv/www/htdocs/fcgi中写一个helloword的php程序(比如叫hello.php),然后在另一台机器上进行测试,访问web服务器:http://web服务器地址/hello.php,应用服务器中hello.php的结果会显示出来。

有一点疑惑是,不知道在应用服务器上的php-cgi从哪里加载配置文件,于是我:
在应用服务器上写一个phpinfo的php程序,显示php的信息,在“Configuration File (php.ini) Path”这一列看到他的值为:/usr/local/php/lib,而Loaded Configuration File 的值为(none),可知他没有找到php配置文件,用的是系统默认的。于是从/etc/中将php的配置文件拷贝到这里来,进行一些必要的配置,比如将cgi.fix_pathinfo 设为 1,还有修改必要的路径等。
然后重启spawn-fcgi,再次访问phpinfo.php,这回就可以看到配置文件已经加载了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交叉编译 lighttpdphp_fpm 需要进行以下步骤: 1. 安装交叉编译工具链:根据目标平台选择合适的交叉编译工具链,例如 arm-linux-gnueabi-gcc 或者 aarch64-linux-gnu-gcc 等,并将其添加到 PATH 环境变量中。 2. 下载 lighttpdphp 源码:从官网下载 lighttpdphp 的源码包,例如 lighttpd-1.4.54.tar.gz 和 php-7.4.16.tar.gz。 3. 解压源码包:使用 tar 命令解压源码包,例如: ``` tar zxvf lighttpd-1.4.54.tar.gz tar zxvf php-7.4.16.tar.gz ``` 4. 进入 lighttpd 源码目录:进入解压后的 lighttpd 源码目录,例如: ``` cd lighttpd-1.4.54 ``` 5. 配置编译选项:使用交叉编译工具链配置编译选项,例如: ``` ./configure --host=arm-linux-gnueabi ``` 6. 编译 lighttpd:使用 make 命令编译 lighttpd,例如: ``` make ``` 7. 进入 php 源码目录:返回上级目录,进入解压后的 php 源码目录,例如: ``` cd ../php-7.4.16 ``` 8. 配置编译选项:使用交叉编译工具链配置编译选项,例如: ``` ./configure --host=arm-linux-gnueabi --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-short-tags --disable-phpdbg ``` 其中,--with-pdo-mysql 和 --with-mysqli 用于支持 MySQL 数据库,--with-openssl 用于支持 SSL/TLS 加密,--enable-fpm 和 --with-fpm-user、--with-fpm-group 用于编译 php_fpm。 9. 编译 php_fpm:使用 make 命令编译 php_fpm,例如: ``` make ``` 10. 将编译完成的 lighttpdphp_fpm 拷贝到目标平台上。 以上就是交叉编译 lighttpdphp_fpm 的步骤,需要注意的是,编译选项需要根据实际情况进行调整,例如根据目标平台选择合适的交叉编译工具链、选择需要支持的模块等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值