Ubuntu搭建Lighttpd服务器以及CGI配置

这里我的源码都放在/usr/local/src/下

一、安装pcre(正则表达式库,解决C语言中使用正则表达式的问题)

1、下载地址:

    http://www.pcre.org/    里面选pcre、pcre2都可)

2、解压

    tar -zxvf pcre2-10.30.tar.gz  

3、配置安装

1)进入Pcre目录

cd  pcre2-10.32

2)配置

   ./configure

3)编译

  make

4)安装

make install


 

二、安装bzip2

1、下载地址

http://www.bzip.org/

2、解压

   tar -zxvf bzip2-1.0.6.tar.gz

3、配置安装

1)进入bzip2目录

cd bzip2-1.0.6

2)设置配置选项

make -f Makefile-libbz2_so

-f 标志使bzip根据另一个Makefile来编译(Makefile-libbz2_so),生成 libbz.so,然后把bzip2工具连接到这个库上

3)编译安装

make && make install


 

三、安装Lighttpd

1、下载地址

http://www.lighttpd.net/download/    (lighttpd-1.4.53 )

 

2、解压

tar -zxvf lighttpd-1.4.53.tar.gz

3、安装

1)创建目录

创建lighttpd(/usr/local/src/lighttpd)

mkdir /usr/local/src/lighttpd

2)进入源码目录

cd /usr/local/src/lighttpd-1.4.53

3)配置安装目录

./configure –prefix=/usr/local/src/lighttpd

4)编译安装

make && make install

4、配置服务器

1)创建相关文件

在/usr/local/src/lighttpd下创建相关文件

mkdir {cache,config,log,sockets,run,www,vhosts}

 

 

2)拷贝源文件doc/config目录下的lighttpd.conf、modules.conf、conf.d文件夹到安装目录的config下

 cp /usr/local/src/lighttpd-1.4.53/doc/config/lighttpd.conf /usr/local/src/lighttpd/config

cp /usr/local/src/lighttpd-1.4.53/doc/config/modules.conf /usr/local/src/lighttpd/config

cp -r /usr/local/src/lighttpd-1.4.53/doc/config/conf.d /usr/local/src/lighttpd/config

 

3)修改lighttpd.conf

//var.xxx是建立一些变量,用来给server.xxx赋值

 

var.log_root    = "/usr/local/src/lighttpd/log"

 //日志的目录,运行起来后会在该目录下生产access.log  error.log文件

 

var.server_root = "/usr/local/src/lighttpd/www"

var.state_dir   = "/usr/local/src/lighttpd/run"

//运行起来会在该目录下创建lighttpd.pid

 

var.home_dir    = "/usr/local/src/lighttpd"

var.conf_dir    = "/usr/local/src/lighttpd/config"

 

var.vhosts_dir  = home_dir + "/vhosts"

 

var.cache_dir   = home_dir+"/cache"

 

var.socket_dir  = home_dir + "/sockets"

 

server.port = 80

 //服务器端口号,80是默认的,浏览器访问不用加端口号 如果已经被占用,可改   为8080,浏览器访问要加 :8080

 

server.use-ipv6 = "disable" //禁止使用IPV6

 

server.bind = "192.168.112.128"  

//绑定ip地址,虚拟机的IP,主机如果要访问虚拟机要保证能ping通,不行的话   //在主机中打开VMnet8虚拟网卡

 

server.username  = "nobody"

//设置用户名和组名,nobody为任何人都可以等于系统

#server.groupname = "nobody"// 用户组这边没有nobody,直接注释掉这行

 

server.document-root = server_root + "/webpages"

//设置网站文件根目录,浏览器访问就是访问到这个目录下的文件

 

server.pid-file = state_dir + "/lighttpd.pid"

//指定pid文件运行起来自动创建

 

server.errorlog = log_root + "/error.log" //log_root下创建error.log

 

server.upload-dirs = (home_dir + "/upload")

 

注意如果服务器运行起来要创建文件的目录下不能创建文件,把那个文件夹权限改为777

 

4)测试服务器

  • cd /usr/local/src/lighttpd/sbin
  • 测试Lighttpd.conf文件语法是否正确

./lighttpd -t -f ../config/lighttpd.conf

           返回 Syntax OK 表示正确

  • 启动lighttpd  ./lighttpd -f ../config/lighttpd.conf

       停止服务器pkill lighttpd

  • 启动服务器后在document-root目录下创建index.html

       内容写hello world!

  • 在浏览器输入http://192.168.112.128(填lighttpd中bind的ip)

        如果出来网页并显示hello world!说明服务器搭建成功

 

5、配置CGI

1)修改modules.conf

 

server.modules = (

  "mod_access", //基础模块

#  "mod_cgi",

  "mod_alias", //路径绑定 用来指定CGI路径

#  "mod_auth",

#  "mod_authn_file",

#  "mod_evasive",

#  "mod_redirect",

#  "mod_rewrite",

#  "mod_setenv",

#  "mod_usertrack",

)

 

 

##

## plain old CGI (mod_cgi)

##

include "conf.d/cgi.conf" //引入cgi.conf

 

注意上面server.modules 不用添加CGI模块,因为在conf.d/cgi.conf里面有server.modules += ( "mod_cgi" ),如果这里添加了,会报错:

 Cannot load plugin mod_cgi more than once, please fix your config lighttpd may not accept such con

 

2)修改cgi.conf

CGI程序可以用C/C++语言等需要编译的语言写,也可以用python、perl、ruby等直接解释执行的语言写,这两种他们的执行方式是不同的:一个是程序直接可以被执行;一个是需要特定的语言解释器来执行。这样的话,web server配置时也会不同。

 

这里有两种方式

方式一:不重定向路径,cgi文件要放在document-root下,访问时加document-root下路径。

 

 

cgi.assign  = ( ".pl"  => "/usr/bin/perl",

                 # ".cgi" => "/usr/bin/perl",

                 ".cgi" => "",  //设置.cgi文件不需要解释器(本来就是编译好的可执行文件)

                 ".rb"  => "/usr/bin/ruby",

                ".erb" => "/usr/bin/eruby",

                ".py"  => "/usr/bin/python" )

 

访问:http://192.168.112.128/cgi-bin/h.cgi

         (h.cgi放在/usr/local/src/lighttpd/www/webpages/cgi-bin/h.cig)

          http://192.168.112.128/h.cgi

         (h.cgi放在/usr/local/src/lighttpd/www/webpages/h.cig)

 

 

方式二:重定向路径,cgi文件要放在重定向的目录下,访问时加重定向的路径

 

cgi.assign  = ( ".pl"  => "/usr/bin/perl",

               # ".cgi" => "/usr/bin/perl",

               # ".cgi" => "", //设置.cgi文件不需要解释器(本来就是编译好的可执行文件)

               ".rb"  => "/usr/bin/ruby",

               ".erb" => "/usr/bin/eruby",

               ".py"  => "/usr/bin/python" )

 

 

alias.url += ( "/cgibin" => home_dir + "/cgibin" )

//使用alias之前server.modules要添加mod_alias做重定向

//重定向路径cgibin到/usr/local/src/Lighttpd/cgibin,重定向的路径可以不放在//document-root下

 

$HTTP["url"] =~ "^/cgibin" {

   cgi.assign = ( "" => "" )

//所有cgibin目录下的程序,不需要语言解释器(cgi.assign = ( "" => "" )),直接被执行

}

访问 http://192.168.112.128/cgibin/h.cgi  

 //cgibin在/usr/local/src/Lighttpd/cgibin

 

方式二另一个重定向位置举例

alias.url += ( "/cgi-bin" => server_root + "/webpages/cgi-bin" )

//cgi-bin重定向到/usr/local/src/Lighttpd/www/webpages/cgi-bin

 

$HTTP["url"] =~ "^/cgi-bin" {

   cgi.assign = ( "" => "" )

}

访问http://192.168.112.128/cgi-bin/h.cgi

 //cgi-bin在/usr/local/src/Lighttpd/www/webpages/cgi-bin

 

 

除去以上两种方式外,其他的程序(既不以特性的后缀结尾,也不放到指定目录下),会被当成文件被下载。

 

 

 

3)测试cgi

在cgi-bin中创建hello_cgi.c

内容

#include "stdio.h"

int main()

{

        printf("Content-type:text/plain\r\n\r\n");

        printf("hello_cgi\n");

        return 0;

}

编译 :gcc hello_cgi.c -o h.cgi

浏览器输入 http://192.168.112.128/cgi-bin/h.cgi

如果出现hello_cgi 表示成功