---
title: arm 移植 lighttpd + CGI 配置
EntryName: porting-lighttpd-on-arm-and-make-cgi-config
date: 2020-07-31 03:14:23
categories:
tags:
- arm
- web
- lighttpd
- cgi
- config
---

章节描述:

介绍 lighttpd 的移植,以及 CGI 配置

lighttpd介绍

lighttpd is a secure, fast, compliant, and very flexible web-server that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set (FastCGI, CGI, Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems.

官网:https://www.lighttpd.net/

维基百科:

背景

需要一个arm平台的方案。

version:

  • lighttpd 1.4.55
  • gcc-3.4.5-glibc-2.3.6/arm-softfloat (采用cross tool制作)
#!/bin/bash
export CC=arm-softfloat-linux-gnu-gcc
export AR=arm-softfloat-linux-gnu-ar
export LD=arm-softfloat-linux-gnu-ld
export RANLIB=arm-softfloat-linux-gnu-ranlib
export STRIP=arm-softfloat-linux-gnu-strip ./configure --prefix=/usr/local/lighttpd-arm --host=arm-softfloat-linux-gnu --build=i686-pc-linux --disable-FEUTARE --disable-ipv6 --disable-lfs --without-bzip2
make
sudo make install #--prefix 为安装目录(主机&目标板一致)

我的移植方案:

##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
#
# File Name: make.sh
# Created : 2020-07-31 09:38:39
#
##
#!/bin/sh BASE=`pwd`
#BUILD_HOST=arm-linux
# 最终的运行环境
INSTALL=${BASE}/install
FIN_INSTALL=/usr/local/lighttpd make_dirs() {
cd ${BASE}
mkdir compressed install source -p
} tget () { #try wget
filename=`basename $1`
echo "Downloading [${filename}]..."
if [ ! -f ${filename} ];then
wget $1
fi echo "[OK] Downloaded [${filename}] "
} download_package () {
cd ${BASE}/compressed
#下载包
tget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.55.tar.gz
} tar_package () {
cd ${BASE}/compressed
ls * > /tmp/list.txt
for TAR in `cat /tmp/list.txt`
do
tar -xf $TAR -C ../source
done
rm -rf /tmp/list.txt
} set_compile_env () {
#GCC_PATH=`whereis gcc | awk -F: '{print $2}' | awk '{print $1}' | xargs dirname`
#export PATH=$PATH:$GCC_PATH
export CC=${BUILD_HOST}gcc
export AR=${BUILD_HOST}ar
export LD=${BUILD_HOST}ld
export RANLIB=${BUILD_HOST}ranlib
export STRIP=${BUILD_HOST}strip
} make_taget () {
cd ${BASE}/source/*
./configure --disable-ipv6 --disable-lfs --without-bzip2 \
--prefix=${FIN_INSTALL} && echo "${FIN_INSTALL} with ${BUILD_HOST}gcc" > ${BASE}/ccinfo
make
} make_install () {
mkdir ${BASE}/install/lib -p
mkdir ${BASE}/install/sbin -p
cd ${BASE}/source/*
SRCTOP=`pwd`
echo "${FIN_INSTALL} with ${BUILD_HOST}gcc" > ${BASE}/ccinfo
cp ${BASE}/ccinfo ${BASE}/install
cp $SRCTOP/src/.libs/*.so ${BASE}/install/lib -r
cp $SRCTOP/src/lighttpd-angel ${BASE}/install/sbin
cp $SRCTOP/src/lighttpd ${BASE}/install/sbin
#cp `find . -type f -name "lighttpd.conf" 2> /dev/null | grep doc` -v ${BASE}/install/sbin
cp $SRCTOP/doc/config -r ${BASE}/install/
rm ${BASE}/install/config/Make*
} make_dirs
set_compile_env
#tar_package
#make_taget
make_install
exit $?

配置 lighttpd.conf

一般配置

修改工作路径:

server.document-root        = "/home/xx/lighttpd/"

关闭http范围请求:

#$HTTP["url"] =~ "\.pdf$" {
# server.range-requests = "disable"
#}

修改组:

lighttpd.conf文件中:注释掉username行,

#server.username  = "lighttpd"
#server.groupname = "lighttpd

否则会出现:

can't find username lighttpd

其他:

文件系统不能读写的话用#号注释掉这两个选项:

#server.errorlog
#accesslog.filename

CGI支持

CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上,提供同客户端 HTML 页面的接口。

我们这里以自定义的cgi程序处理为例子。

确定目录结构

假定目录位于/home/xx/lighttpd/,目录结构如下:

/home/xx/lighttpd/install
├── config
├───lighttpd.conf
│   ├── conf.d
│   └── vhosts.d
├── lib
└── sbin

配置 lighttpd

说明:

由于这个版本的lighttpd是很新的一个版本,很多文章的配置都有一些变化。但是实际上是类似的。

新版lighttpd.conf中,include了很多子配置,例如include "modules.conf"

如果需要配置cgi,一般在modules.conf中使能include conf.d/cgi.conf比较合理。

当然,也可以在lighttpd.conf中注释掉include "modules.conf",将所有的配置写在lighttpd.conf里面。

编辑conf.d/cgi.conf

# 确保 此行有效:
server.modules += ( "mod_cgi" ) # 修改 cgi.assign
## 注:对于带扩展名且需要特定解析程序执行的CGI,可以指定解析程序的路径 cgi.assign = ( ".pl" => "/usr/bin/perl",
".rb" => "/usr/bin/ruby",
".erb" => "/usr/bin/eruby",
## 对于带扩展名却不需要特定解析程序就能执行的CGI,可指定解析程序为空,此时可由html中指定需要执行的cgi程序。(例如下面这行)
# 新增这一行
".cgi" => "", ".py" => "/usr/bin/python" ) ## 对于不带扩展名的CGI程序,只能通过固定路径存取了,如:
## cgi.assgin = ( "/cgi-bin/mycgi" => "/usr/local/cgi/mycgi )

编写网页

为了方便,以index.html修改,内容为:

注意其中的Action指定的路径要与实际上的服务器工作路径相对应。

我们这里将请求发送给cgi-bin下的程序

  • mult_sh.cgi :由sh处理
  • mult_c.cgi : 由c程序处理
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
<form name="form1" ACTION="/cgi-bin/mult_sh.cgi">
<P>计算两个数的乘积,请输入两个乘数。
<INPUT NAME="m" SIZE="5">
<INPUT NAME="n" SIZE="5"><BR>
<INPUT TYPE="SUBMIT" values="提交">
</form>
</body>
</html>

创建cgi目录

假设新建的目录名为:cgi-bin,此时的目录如下:

/home/xx/lighttpd/install
├─▲ cgi-bin
├── config
│   ├── conf.d
│   └── vhosts.d
├── lib
└── sbin

编写自定义cgi程序

cgi程序可以有很多种写法,这里以bash与c语言为例。

程序需要放在/home/xx/lighttpd/install/cgi-bin中,这是由html文件指定的。

c程序

这段C程序会处理网络请求,并做正确的运算。

/*
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
#
# File Name: mult_c.c
# Created : 2020-07-31 14:20:53
*/ #include <stdio.h>
#include <stdlib.h> int main(void)
{
char *data;
long m,n; printf("%s\n\n","Content-Type:text/html;charset=utf8");
printf("<TITLE>乘法结果</TITLE> ");
printf("<H3>乘法结果</H3> "); data = getenv("QUERY_STRING"); //获得form传来的参数——两个乘数m和n
if(data == NULL)
printf("<P>错误!数据没有被输入或者数据传输有问题");
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
printf("<P>错误!输入数据非法。表单中输入的必须是数字。");
else
printf("<P>%ld和%ld的乘积是:%ld。",m,n,m*n);
return 0;
}

编译:

注意,执行文件的后缀名为配置好的.cgi,否则会变成文件传输。

gcc mult_c.c -o mult_c.cgi
脚本
##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
#
# File Name: mult_sh.cgi
# Created : 2020-07-31 14:18:24
#
##
#!/bin/sh # 获取网络传过来的参数
str=$QUERY_STRING echo "Content-type: text/html" # HTTP头部的一部分,告诉浏览器文件的内容类型。
echo # 空行,告诉服务器结束头部 ## 自定义的处理(这里不做处理,只做数据回环)
echo
echo
echo ""
echo ""
echo "hello, this is the output from shell"
echo "<br>Data send by Browser : [$QUERY_STRING]</br>"
echo ""

测试

指定配置文件启动:

cd /home/xx/lighttpd/
sbin/lighttpd -f config/lighttpd.conf

打开网页,测试

arm 移植 lighttpd + CGI 配置的更多相关文章

  1. Azure ARM模式下VNet配置中需要注意的几点事项

    虚拟网络的配置是所有公有云中非常重要的环节.把虚拟网络配置好,对整个系统的管理.维护,以及安全性都非常重要. 本文将介绍Azure在ARM模式下VNet配置中需要特别注意的几点. 一 Azure的VN ...

  2. python配置apache的web服务器方法(python的CGI配置)

    先大概介绍一下:Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运 ...

  3. Linux Python apache的cgi配置

    一.找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改 1.加载cgi模块 去掉注释: LoadModule cgid_module m ...

  4. 【神经网络与深度学习】【CUDA开发】【VS开发】Microsoft官方移植了Caffe配置过程说明

    想在Windows平台使用Caffe,吭哧吭哧下载了半天第三方库,后来忽然发现Microsoft官方移植了Caffe,配置起来简直太省心了- 1. 从Microsoft官方Github上下载Caffe ...

  5. qt-5.6.0 移植之tslib 配置及编译

    tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...

  6. discuz论坛移植修改数据库配置

    从其他地方拷贝的discuz源码,可能需要修改数据库配置 分别打开discuz目录下面以下三个文件 discuzRoot/uc_server/data/config.inc.phpdiscuzRoot ...

  7. jsoncpp linux平台编译和arm移植

    下载 http://sourceforge.net/projects/jsoncpp/ 或者 http://download.csdn.net/detail/chinaeran/8631141 Lin ...

  8. jsoncpp 0.5 ARM移植

    1.下载jsonapp 0.5 https://github.com/open-source-parsers/jsoncpp 2.编译 platform 没有包含 arm 平台,需要把源码提取出来,独 ...

  9. 【OK210试用体验】进阶篇(2)视频图像采集之MJPG-streamer编译(arm移植)

    上一篇([OK210试用体验]进阶篇(1)视频图像采集之MJPG-streamer编译(Ubuntu系统下))进行了MJPG-streamer在Ubuntu下的编译及测试,这一篇针对OK210,进行a ...

  10. Apache CGI 配置

    在/etc/apache2/apache2.conf末尾添加 ServerName lacalhost:80 然后启动CGI模块: sudo a2enmod cgi 3.重启Apache: syste ...

随机推荐

  1. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析

    1. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析 @ 目录 1. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析 每博一文案 1.1 Bean的循环依赖 1 ...

  2. pde复习笔记 第一章 波动方程 第六节 能量不等式、波动方程解的唯一性和稳定性

    能量不等式 这一部分需要知道的是能量的表达式 \[E(t)=\int_{0}^{l}u_{t}^{2}+a^{2}u_{x}^{2} dx \] 一般而言题目常见的问法是证明能量是减少的,也就是我们需 ...

  3. Vs2019在发布过程中遇到xxx-Web.config Connection String"参数不能为 Null 或 空 的错误

    原文地址:https://www.zhaimaojun.top/Note/5465234 如下图: 当使用的数据库更换或者修改后数据库字段会失效,当我们从webconfig中清除数据库字段后,依然会报 ...

  4. BIN文件格式

    BIN文件里面包含的只有代码生成的机器码,不像ELF文件或者obj文件一样还包含其他东西.MS-DOS.设备驱动文件以及操作系统的bootloader文件都是BIN文件. 在NASM中,BIN文件默认 ...

  5. VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?

    看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...

  6. Django 自定义管理命令:从入门到高级

    title: Django 自定义管理命令:从入门到高级 date: 2024/5/16 18:34:29 updated: 2024/5/16 18:34:29 categories: 后端开发 t ...

  7. 腾讯云服务器Ubuntu-配置mysql,nginx,nodejs

    ​趁着618腾讯云服务器的促销活动,笔者买了最低配置的云服务器,用作学习. 接上一篇文章的内容,系统方面选择了Ubuntu,版本是20.04 LTS. 选择Ubuntu的原因,主要是因为Ubuntu一 ...

  8. uni-app前端图表组件库,折线图横屏android失败的解决办法

    网址:https://www.ucharts.cn/v2/#/demo/index,需要登录,微信就可以 我在使用折现图时,业务需要把曲线图在点击全屏时横屏全屏显示.就做个全屏页面,点击后,把opti ...

  9. C# 使用 NPOI 导出excel 单击单元格背景变黑色的解决办法

    需要手动指定单元格的背景色为一种颜色, 特别注意,我在使用 var color=new XSSFColor(new color...)创建的颜色,即使设置成其他颜色,查看样式属性中,发现color.i ...

  10. MahApps.Metro的MVVM模式解析(二) 主题功能

    MahApps.Metro的MVVM模式解析(二) 主题功能 MahApps.Metro是一个开源的WPF框架,旨在为WPF应用程序提供现代和漂亮的用户界面. 在MahApps.Metro中提供了切换 ...