网站搜索

Linux 上的 CGI 脚本:Apache CGI-bin 配置示例


通用网关接口 (CGI) 是一项重要技术,用作 Web 客户端和服务器之间的链接,支持在 Web 服务器上执行脚本和程序。尽管较新的技术在很大程度上取代了 CGI,但它仍然是 Linux 系统管理员通过 Web 浏览器进行快速系统监控和管理任务的有用工具。

在本教程中,您将学习:

  • 如何在 Ubuntu Linux 上安装 Apache Web 服务器
  • 如何以各种编程语言创建和执行 CGI 脚本
  • 如何从 Web 浏览器访问和测试 CGI 脚本

关于 LINUX 上 CGI 和 APACHE 的有趣事实<BR />由于其健壮性和灵活性,Linux 上的 Apache 历来是 CGI 的主要平台之一。尽管新技术兴起,但 CGI 仍然适用于需要生成外部程序的任务,或者以 Web 服务器本身不支持的语言运行脚本的任务。一个值得注意的方面是 Apache 能够利用 Linux 强大的进程隔离机制安全高效地处理 CGI 脚本。此外,Apache 可以配置为以几乎任何编程语言执行 CGI 脚本,使其成为动态内容生成的多功能工具。

安装和设置

在开始使用 CGI 脚本之前,必须设置 Apache Web 服务器并为 CGI 执行准备环境。该过程涉及几个详细步骤,以确保 Apache 被正确配置以执行 CGI 脚本。

  1. 安装 Apache:首先在 Ubuntu 系统上安装 Apache Web 服务器。打开终端并输入以下命令:

    sudo apt update
    sudo apt install apache2
  2. 此命令将更新您的软件包列表并安装 Apache 2 Web 服务器。Apache 预先配置了默认网站和执行 CGI 脚本的能力。

  3. 启用 CGI 模块:Apache 要求启用 CGI 模块才能运行 CGI 脚本。通过执行以下命令来启用此模块:

    sudo a2enmod cgi
  4. 此命令启用 'cgi' 模块,这是处理 CGI 脚本执行所必需的。

  5. CGI 的 Apache 配置:要执行以各种语言(如 Python、Perl 或 Bash)编写的 CGI 脚本,必须将 Apache 配置为适当地识别和处理这些文件。修改 Apache 配置文件,该文件通常位于 /etc/apache2/sites-available/ 或直接位于主配置文件中,具体取决于您的系统设置。添加或确保存在以下配置:

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI
        AddHandler cgi-script .cgi .pl .py .sh .rb .go .js .php
        Require all granted
    </Directory>
  6. 此配置设置一个映射到存储 CGI 脚本的目录 (ScriptAlias) 的 URL 路径,允许在指定目录中执行 CGI 脚本 (Options +ExecCGI),通知 Apache 具有 .cgi、.pl、.py、.sh、.rb、.go、.js 和 .php 等扩展名的文件应被视为 CGI 脚本 (AddHandler),并允许所有用户访问 CGI 脚本, 可能需要根据安全策略进行限制 (Require all granted)。

  7. 重新启动 Apache 以应用更改:配置设置后,重新启动 Apache 以确保所有更改生效:

    sudo systemctl restart apache2
  8. 验证 Apache 安装:要确认 Apache 已成功安装并正在运行,您可以在 Web 浏览器中访问服务器的 IP 地址。您应该会看到默认的 Apache Ubuntu 默认页面。

创建 CGI 脚本

将 Apache 配置为运行 CGI 脚本后,您可以开始以各种编程语言创建脚本。每个脚本都必须是可执行的,并且位于指定的 CGI 目录中。按照这些详细步骤使用 Bash、Python、Perl 和 C/C++ 创建 CGI 脚本。

  1. 创建 Bash CGI 脚本:从输出 HTML 内容的简单 Bash 脚本开始。使用您最喜欢的文本编辑器在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-bash.sh 的文件。

    #!/bin/bash
    echo "Content-type: text/html"
    echo ""
    echo "<html><head><title>CGI Bash Example</title></head><body>"
    echo "<h1>Hello from Bash CGI!</h1>"
    echo "</body></html>"

    保存脚本并使其可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-bash.sh
  2. 此脚本将 HTTP 标头和 HTML 内容作为输出发送,可在 Web 浏览器中查看。

  3. 创建 Python CGI 脚本: Python 脚本也可以用于 CGI 目的。在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-python.py 的文件。

    #!/usr/bin/python3
    print("Content-type: text/html\n\n")
    print("<html><head><title>CGI Python Example</title></head><body>")
    print("<h1>Hello from Python CGI!</h1>")
    print("</body></html>")

    保存脚本并使其可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-python.py
  4. 此脚本执行与 Bash 脚本类似的功能,使用 Python 输出 HTML。

  5. 创建 Perl CGI 脚本: Perl 是 CGI 脚本的另一种流行语言。在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-perl.pl 的文件。

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "<html><head><title>CGI Perl Example</title></head><body>";
    print "<h1>Hello from Perl CGI!</h1>";
    print "</body></html>";

    保存脚本并使其可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-perl.pl
  6. 此 Perl 脚本将 HTML 输出到浏览器,演示了 CGI 脚本在 Perl 中的工作原理。

  7. 创建 C CGI 脚本: C 还可用于 CGI 脚本以处理更复杂的处理任务。首先,确保您的系统上安装了 GCC 编译器:

    sudo apt install gcc

    接下来,在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-c.c 的文件:

    #include <stdio.h>
    int main(void) {
        printf("Content-Type: text/html\n\n");
        printf("<html><head><title>CGI C Example</title></head><body>");
        printf("<h1>Hello from C CGI!</h1>");
        printf("</body></html>");
        return 0;
    }

    编译 C 程序以创建适合 CGI 处理的可执行文件:

    sudo gcc -o /usr/lib/cgi-bin/example-c /usr/lib/cgi-bin/example-c.c
  8. 此步骤将 C 源代码编译为名为 example-c 的可执行文件,该可执行文件存储在 CGI 目录中,允许 Web 服务器将其作为 CGI 脚本执行。此示例演示如何使用编译为 CGI 脚本的 C 程序输出 HTML 内容。

  9. Ruby CGI 脚本:Ruby 是一种易于使用的脚本语言,非常适合快速编写脚本。首先,确保已安装 Ruby:

    sudo apt install ruby

    在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-ruby.rb 的文件:

    #!/usr/bin/ruby
    puts "Content-type: text/html\n\n"
    puts "<html><head><title>CGI Ruby Example</title></head><body>"
    puts "<h1>Hello from Ruby CGI!</h1>"
    puts "</body></html>"

    保存此脚本并使其可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-ruby.rb

    此脚本输出 HTML 内容,类似于前面的示例,但使用 Ruby。

  10. Node.js CGI 脚本:Node.js通常用于完整的服务器应用程序,但可以通过适当的设置运行 CGI 脚本。首先安装 Node.js:

    sudo apt-get install nodejs

    在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-node.js 的文件:

    #!/usr/bin/node
    console.log("Content-type: text/html\n\n");
    console.log("<html><head><title>CGI Node.js Example</title></head><body>");
    console.log("<h1>Hello from Node.js CGI!</h1>");
    console.log("</body></html>");

    使脚本可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-node.js
  11. 此示例在 Node.js 环境中使用 JavaScript 来提供 CGI 内容。

  12. PHP CGI 脚本: PHP 也可以用作 CGI 脚本。如果 PHP CLI 尚不可用,请安装 PHP CLI:

    sudo apt install php-cli

    在 /usr/lib/cgi-bin/ 目录中创建一个名为 example-php.php 的文件:

    #!/usr/bin/php
    <?php
    echo "Content-type: text/html\n\n";
    echo "<html><head><title>CGI PHP Example</title></head><body>";
    echo "<h1>Hello from PHP CGI!</h1>";
    echo "</body></html>";

    将文件更改为可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-php.php
  13. 此 PHP 脚本在通过 Web 服务器访问时将生成 HTML 内容。

  14. Go CGI 脚本: Go 以其性能和效率而闻名。安装 Go:

    sudo apt install golang-go

    在 /usr/lib/cgi-bin/ 目录下创建一个名为 example-go.go 的 Go 脚本:

    // File: example-go.go
    package main
    import "fmt"
    func main() {
        fmt.Println("Content-type: text/html\n\n")
        fmt.Println("<html><head><title>CGI Go Example</title></head><body>")
        fmt.Println("<h1>Hello from Go CGI!</h1>")
        fmt.Println("</body></html>")
    }

    编译 Go 程序并制作可执行文件:

    sudo go build -o /usr/lib/cgi-bin/example-go /usr/lib/cgi-bin/example-go.go
  15. 此脚本使用 Go 生成用于 CGI 的 HTML 输出。

  16. Tcl CGI 脚本: Tcl 是另一种适用于 CGI 脚本的脚本语言。安装 Tcl:

    sudo apt install tcl

    在 /usr/lib/cgi-bin/ 目录下创建一个名为 example-tcl.tcl 的 Tcl 脚本:

    #!/usr/bin/tclsh
    puts "Content-type: text/html\n\n"
    puts "<html><head><title>CGI Tcl Example</title></head><body>"
    puts "<h1>Hello from Tcl CGI!</h1>"
    puts "</body></html>"

    使脚本可执行:

    sudo chmod +x /usr/lib/cgi-bin/example-tcl.tcl
  17. 此脚本演示了使用 Tcl 生成 HTML 内容的 CGI 功能。

测试 CGI 脚本

使用各种编程语言创建 CGI 脚本后,测试它们以确保它们正常运行至关重要。这涉及通过 Web 浏览器访问每个脚本,以验证它们是否执行并呈现预期的输出。

  1. 访问 CGI 脚本:使用 Web 浏览器导航到您创建的每个 CGI 脚本。例如,要访问 Bash CGI 脚本,您可以使用:

    http://cgi-example.local/cgi-bin/example-bash.sh
  2. 同样,将 example-bash.sh 替换为其他脚本的名称,如 example-python.py、example-perl.pl、example-ruby.rb 等,以测试这些脚本。

  3. 查看 CGI 输出:在访问脚本的 URL 时,您的 Web 服务器会执行这些 URL 并将其输出作为网页发送。检查输出以确保它正确显示并反映脚本的预期内容。这确认脚本运行正常,并且服务器已正确配置为处理 CGI 脚本。

结论

尽管它可能被视为过时,但 CGI 提供了一种强大的方法,可以将外部编程脚本集成到 Web 环境中,以实现有效的系统管理。通过遵循本指南,您可以在 Linux 服务器上为各种管理和监控任务部署 CGI 脚本。

相关文章: