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 表示成功