安装pcre(正则表达式库,解决C语言中使用正则表达式的问题)
wget https://ftp.pcre.org/pub/pcre/pcre2-10.33.tar.gz
tar -zxvf pcre2-10.33.tar.gz
cd pcre2-10.33
./configure
make
make install
安装bzip2
wget https://downloads.sourceforge.net/project/bzip2/bzip2-1.0.6.tar.gz
tar -zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make -f Makefile-libbz2_so
make && make install
安装lighttpd
tar -zxvf lighttpd-1.4.39.tar.gz
mkdir /usr/local/src/lighttpd
cd lighttpd-1.4.39
./configure --prefix=/usr/local/src/lighttpd
make && make install
prefix选项就是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较分散。为了便于集中管理某个软件的各种文件,可以配置–prefix
执行以上步骤之后,lighttpd_project目录下就会生成lib sbin share三个目录
配置服务器
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为任何人都可以等于系统
//如果想设置权限为root,直接注释掉这两行就行
#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 -D -f ../config/lighttpd.conf -m ../lib/&
注意启动的时候必须指明lib的位置,否则会报如下错误:
2015-01-01 00:29:43: (plugin.c.230) dlopen() failed for: /usr/local/lib/mod_indexfile.so /usr/local/lib/mod_indexfile.so: undefined symbol: buffer_copy_string_buffer
2015-01-01 00:29:43: (server.c.1155) loading plugins finally failed
原因:prefix配置安装文件的时候将所有杂七杂八的文件都放在了指定目录/usr/local/src/lighttpd/lib下,里面就包括mod_indexfile.so 这个文件。
也可以单独下载这系列文件,到 http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/lighttpd_1.4.32-1_mipsel.ipk 下载 lighttpd的ipk,改名为zip,解压缩,里面data.tar.gz再解压缩,然后里面lib/lighttpd/里面有so模块。
出现错误:2019-06-27 15:55:08: (plugin.c.223) dlopen() failed for: /usr/local/lib/mod_indexfile.so /usr/local/lib/mod_indexfile.so: wrong ELF class: ELFCLASS32
2019-06-27 15:55:08: (server.c.684) loading plugins finally failed
解决方案:下载的是32位文件,系统是64位,所以出现不兼容。
停止服务器
pkill lighttpd
netstat -ltp命令查看是否已经启动
在在document-root目录下创建index.html
document-root目录=/usr/local/src/lighttpd/www/webpages,这是在修改lighttpd.conf时设置的,在这个目录下放一个索引页面
在浏览器输入http://172.171.50.70(填lighttpd中bind的ip)
如果出来网页并显示hello world!说明服务器搭建成功
5)配置CGI
修改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)
6)测试cgi
在cgi-bin中创建hello_cgi.c
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://172.171.50.70/cgi-bin/h.cgi
如果出现hello_cgi 表示成功
安装firefox
yum install firefox
出现错误:centOS Cannot find a valid baseurl for repo: epel
解决方案:/etc/yum.repos.d/
修改文件epel.repo.bak(随便修改个名字)
mv epel.repo epel.repo.bak