现在的位置: 首页 > 综合 > 正文

linux下fastcgi安装配置

2013年08月18日 ⁄ 综合 ⁄ 共 3726字 ⁄ 字号 评论关闭
  1. 下载安装
    http://archive.apache.org/dist/httpd/下载apache_1.3.6.tar.gz
    http://www.fastcgi.com/下载mod_fastcgi-2.4.0.tar.gz和fcgi-2.4.0.tar.gz
    为什么下载这两本版本?
    因为fastcgi很久没有更新,最新的版本都是2003年的,所以尽量着一个fastcgi的高版本,和一个低版本的apache上,这样尽量避免有些版本的fastcgi由于版本的原因,没有在一些高版本的apache调试过,出现一些我们不能解决的问题。
    后面顺序执行如下的命令:
    gunzip -c apache_1.3.6.tar.gz | tar xvf -
    gunzip -c mod_fastcgi-2.4.0.tar.gz  | tar xvf -
    cp -rp mod_fastcgi-2.4.0 apache_1.3.6/src/modules/fastcgi
    cd apache_1.3.6
    ./configure --prefix=/usr/local/apache --activate-module=src/modules/fastcgi/libfastcgi.a --enable-module=info --enable-shared=info
    make
    make install
    命令解释
    cp -rp mod_fastcgi-2.4.0 apache_1.3.6/src/modules/fastcgi 将fastcgi拷贝到apache源文件中,作为一个模块编译连接到apache中
    ./configure --prefix=/usr/local/apache --activate-module=src/modules/fastcgi/libfastcgi.a --enable-module=info --enable-shared=info  中--prefix=/usr/local/apache指定了安装目录,如果登录用户没有在目录/usr/local中创建目录的权限,在后面make install中会报错,有两个解决办法,1)用root用户在/usr/local下创建apache目录,再chmod a+wrx apache,使别的用户拥有足够的权限;2)将--prefix指定的安装目录指向一个登录用户拥有创建目录权限的路径下; --activate-module=src/modules/fastcgi/libfastcgi.a 在编译的时候添加一个fastcgi模块到apache中。
    make编译
    make install安装
  2. 启动配置
    首先在环境变量中添加路径,如果在linux下,打开.bash_profile,在unix下,打开.profile
    PATH=$PATH:/usr/local/apache/bin,将apache执行程序添加到搜索路径中。
    启动,执行命令:
    apachectl start
    如果没有错误信息表名成功,打开ie,输入http://ip:8080(这里的ip地址是apache的安装主机),如果有页面显示,说明apache成功安装、启动。
    我曾经在启动的时候,出现过如下两个错误:
    错误1:
    Syntax error on line 201 of /usr/local/apache/conf/httpd.conf:
    Cannot load /usr/local/apache/libexec/mod_fastcgi.so into server: /usr/local/apache/libexec/mod_fastcgi.so: undefined symbol: fstat
    /usr/local/apache/bin/apachectl start: httpd could not be started
    我检查了mod_fastcgi.so 路径下的每一个目录,权限不是问题,根据“undefined symbol”断定,肯定是编译的问题,编译按常规判断,也是没有问题的,没有报错,那么肯定是有些版本下,一些符号重新编译了,后来想到fastcgi从2003年之后就没有更新了,那么应该是版本融合、兼容的问题。后来下载了一个相对较高的fastcgi版本,何一个相对比较低的apache版本,解决了这个问题。
    错误2:
    httpd: cannot determine local host name.
    Use the ServerName directive to set it manually.
    /usr/local/apache/bin/apachectl start: httpd could not be started
    这个很简单,一看就明白,修改apache配置文件httpd.conf,找到被注释了的ServerName属性,取消注释,添加一个自己的属性名。再执行apachectl start命令,ok。
    相关命令
    apachectl stop 停止
    apachectl restart 重新启动
  3. 配置fastcgi应用
    首先安装fastcgi c++开发包
    上传fcgi-2.4.0.tar.gz,顺序执行下面的命令即可
    gunzip -c fcgi-2.4.0.tar.gz | tar xvf -
    cd fcgi-2.4.0
    ./configure
    make
    make install这一步可以不要,只你在开发程序的时候,添加正确include路径和lib路径就可以了

    配置fastcgi环境变量,在.bash_profile添加如下内容:

    后面就可以配置fastcgi应用了.
    打开/usr/local/apache/conf/httpd.conf  添加如下配置:
    <IfModule mod_fastcgi.c>
     AddHandler fastcgi-script .fcg .fcgi .fpl
     Alias /fcgi-bin/ "/usr/local/apache/fcgi-bin/"
     <Directory "/usr/local/apache/fcgi-bin">
      AllowOverride None
      Options None ExecCGI
      Order allow,deny
      Allow from all
      SetHandler fastcgi-script
     </Directory>
     FastCgiExternalServer /usr/local/apache/fcgi-bin/echo -idle-timeout 30 -host 192.168.1.113:60000
    </IfModule>
    根据上面的配置,必须在apache目录下创建目录fcgi-bin,不然在下面用ie访问fcgi的时候会有问题。
    上面的配置应该都比较好理解,主要是FastCgiExternalServer行的配置
    在fcgi-bin下面,其实没有echo程序,只是一个虚拟的fastcgi应用,就像tomcat,weblogic上面配置虚拟的uri一样,其实并物理上存在的路径。-idle-timeout 30 表示超时时间是30秒;-host 192.168.1.113:60000表示在主机192.168.1.113的60000端口建立监听等待fastcgi应用程序启动加入。这时候如果打开ie,输入http://192.168.1.113:8080/fcgi-bin/echo,会显示一个内部服务器错我信息页面,因为这个时候,没有fasgcgi程序加入到应用中来。
    接着我们进入fcgi-2.4.0/examples目录,执行命令cgi-fcgi -start -connect 192.168.1.113:60000 ./echo 1,看清楚,这个命令中的地址和段口号和上面FastCgiExternalServer 配置的对应,表示加入到这个虚拟的fastcgi路径中来,就像在tomcat中,即是配置了虚拟的路径,但是如果实际该路经下没有请求的资源,也会包一个错误信息。最后一个参数1表示启动一个进程,如果该资源请求量很大,可以启动多个进程。再刷新ie,这时会有显示一个正常的页面,在第二行会显示这样的文字,Request number 1 Process ID: 11472,如果不断刷新ie,Request number 1已会不断增加,但是Process ID的值保持不变,这就是fastcgi一次运行,一直运行,不像常规的cgi,每次有请求来的时候,都fork一个进程,出来完之后进程退出,由于每次都重新启动一个进程,会带来很大的开销,造成速度变慢。具体fastcgi的介绍在这儿就不再浪费篇幅,大家可以在baidu,google上找到很多介绍。
    后面有时间,我会提供两个c/c++在fastcgi应用方面的程序和详细的注释。
    欢迎大家回复,大家一起来完善fastcgi的资料。

抱歉!评论已关闭.