【章节 二】Lighttpd Server之CGI环境配置、开发详细流程


前言

 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。随着社会的发展,网站呈现也越来越复杂,为了满足与社会发展的需求,所以出现动态技术( common gateway interface)简称cgi。。
 本章节以零基础为起点介绍Lighttpd结合CGI的配置、实例开发、测试。后续篇章将以Lighttpd、CGI为基础进一步介绍其它功能。


一、CGI是什么?

 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

 组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。

它们之间通讯方式如下图所示:
在这里插入图片描述

二、工作原理

 WEB服务器根据CGI程序的类型决定数据向CGI程序的传送方式,一般来讲是通过标准输入/输出流和环境变量来与CGI程序间传递数据。
如下图所示:
在这里插入图片描述
 CGI程序通过标准输入(STDIN)和标准输出(STDOUT)来进行输入输出。此外CGI程序还通过环境变量来得到输入,操作系统提供了许 多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了一些环境变量,用来向CGI程序传递一些重要的参 数。CGI的GET方法还通过环境变量QUERY-STRING向CGI程序传递Form中的数据。
 下面是一些常用的CGI环境变量:

变量名描述
CONTENT_TYPE这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE客户机内的 COOKIE 内容。
HTTP_USER_AGENT提供包含了版本数或其他专有数据的客户浏览器信息。
PATH_INFO这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
QUERY_STRING如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号’?'分隔。
REMOTE_ADDR这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Web服务器的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
REMOTE_HOST这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
REQUEST_METHOD提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
SCRIPT_FILENAMECGI脚本的完整路径
SCRIPT_NAMECGI脚本的的名称
SERVER_NAME这是你的 WEB 服务器的主机名、别名或IP地址。
SERVER_SOFTWARE这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号。例如,上面的值为Apache/2.2.14(Unix)

三、 环境配置

 在已完成Lighttpd的搭建及配置的基础上,请参考:【章节 一】嵌入式Web Server Lighttpd安装、配置、开发详细流程

添加cgi模块配置文件:
在这里插入图片描述
修改前:
在这里插入图片描述

  • 修改后:

在这里插入图片描述
修改CGi模块配置文件

  • 修改前:
    在这里插入图片描述

  • 修改后:

在这里插入图片描述
备注:lighttpd 配置 cgi, 打开cgi.conf, cgi.assign = (".cgi" => "") 设置 cgi 模块的扩展名和解释器。就本语句而言,表示cgi模块的扩展名是“.cgi”且该 cgi 模块不需要特别的解释器来执行。因为用c来写的是可执行文件。

四、运行测试

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
        char * data;
        char * data1;
        data = getenv("REMOTE_ADDR");
        puts(data);
        printf("Hello CGI! \n");
        return 0;
}
  • 运行效果
    在这里插入图片描述

总结

 以上就是本章节要讲的内容,本文仅仅简单介绍了lighttpd如何启用CGI功能的配置详细配置,同时提供CGI程序的开发、编译及验证, 对改功能模块不熟悉的按步骤进行学习, 本章节为CGI的基础功能学习, 我们将在后续章节介绍更多关于CGI的使用方法。

lighttpd 是一个轻量级的 Web 服务器,它支持 CGI(公共网关接口)来实现动态内容的处理。CGI 是一种通用的协议,它允许 Web 服务器与外部程序(通常是用脚本语言编写的)进行交互,以生成动态的网页内容。 在 lighttpd 中启用 CGI 支持,你需要进行以下配置步骤: 1. 确保你已经安装了 lighttpd,并且已经启动了服务器。 2. 编辑 lighttpd配置文件,通常位于 /etc/lighttpd/lighttpd.conf。 3. 在配置文件中找到 server.modules 部分,并确保 mod_cgi 模块已经被加载。如果没有加载,你可以将类似以下的行添加到配置文件中: ``` server.modules += ("mod_cgi") ``` 4. 找到 server.document-root 部分,并设置网页文件的根目录。例如: ``` server.document-root = "/var/www/html" ``` 5. 找到 server.indexfiles 部分,并确保包含了适当的索引文件(例如 index.html 或 index.php)。 6. 找到 cgi.assign 部分,并添加以下行来指定 CGI 脚本的文件扩展名和解释器路径。例如: ``` cgi.assign = ( ".cgi" => "/usr/bin/perl", ".pl" => "/usr/bin/perl", ".php" => "/usr/bin/php-cgi" ) ``` 这个例子中,.cgi、.pl 和 .php 扩展名的脚本将分别由 Perl 和 PHP 解释器处理。 7. 保存并关闭配置文件。 8. 重新启动 lighttpd 服务器以使配置生效。 现在,你可以将你的 CGI 脚本放置在指定的网页根目录下,并通过浏览器访问它们。确保你的脚本有可执行权限,并且文件扩展名与配置文件中指定的一致。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值