一、CGI概念:
CGI:Common Gateway Interface,公共网关接口,是Web服务器运行时外部程序的规范,按CGI编写的程序可以扩展服务器功能。CGI应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据,格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据存入数据库。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、Java、VB和Delphi等。CGI分为标准CGI和间接CGI两种。标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,缓冲程序与CGI接口间用标准输入输出进行通信。
二、CGI代码实现:
1、 安装httpd:
# yum -y install httpd2、 确认httpd.conf配置文件中存在如下代码:
# vim /etc/httpd/conf/httpd.conf<IfModule alias_module>ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
3、 启动httpd:
# systemctl start httpd4、 编写index.cgi:
# cd /var/www/cgi-bin
# vim index.cgi#!/bin/bash
#index.cgi
echo "Content-Type:text/html;charset=utf-8"
echo
cat << AAA
<html>
<head>
<title>CGI Test</title>
</head>
<h3>
AAA
ifconfig ens33 | grep-w 'inet' | awk '{print $2}'
cat << AAA
</h3>
</html>
AAA
# chmod +x index.cgi
5、 安装net-tools:
# yum -y install net-tools6、shell 命令执行效果:
# ifconfig ens33 | grep -w 'inet' | awk '{print $2}'7、浏览器中输入192.168.0.122/cgi-bin/index.cgi:
三、CGI环境变量:
1、 编写info.cgi:
# cd /var/www/cgi-bin
# vim info.cgi#!/bin/bash
#info.cgi
echo "Content-Type:text/html;charset=utf-8"
echo
cat << AAA
<html>
<head>
<title>CGI Info</title>
</head>
<body>
<h3>
<pre>
AAA
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo SCRIPT_NAME = $SCRIPT_NAME
echo REMOTE_ADDR = $REMOTE_ADDR
cat << AAA
</pre>
</h3>
</body>
</html>
AAA
# chmod +x info.cgi
说明:
$SERVER_SOFTWARE:服务器软件及版本
$SERVER_NAME:服务器IP
$GATEWAY_INTERFACE:CGI版本
$SERVER_PROTOCOL:通信使用协议
$SERVER_PORT:服务器端口号
$REQUEST_METHOD:请求方法(GET/POST/PUT/DELETE等)
$SCRIPT_NAME:当前运行的脚本名称(包含路径)
$REMOTE_ADDR:客户端IP
2、浏览器中输入192.168.0.122/cgi-bin/info.cgi: