ウェブサイト検索

LinuxにおけるCGIスクリプト: Apache CGI-binの設定例


共通ゲートウェイインターフェース(CGI)は、ウェブクライアントとサーバーの間のリンクとして機能し、ウェブサーバー上でスクリプトやプログラムを実行できる重要な技術です。新しい技術がCGIを大部分置き換えたものの、Linuxのシステム管理者にとっては、ウェブブラウザを介した迅速なシステム監視や管理タスクのための便利なツールのままです。

このチュートリアルでは、あなたは学びます:

  • Ubuntu LinuxにApacheウェブサーバーをインストールする方法
  • さまざまなプログラミング言語でCGIスクリプトを作成し実行する方法
  • ウェブブラウザからCGIスクリプトにアクセスしてテストする方法

LINUX上のAPACHEによるCGIに関する面白い事実
Linux上のApacheは、その堅牢性と柔軟性により、歴史的にCGIの主要なプラットフォームの一つでした。新しい技術の台頭にもかかわらず、外部プログラムを生成する必要があるタスクや、ウェブサーバーがネイティブにサポートしていない言語でスクリプトを実行する際には、CGIは依然として関連性があります。特筆すべき点は、ApacheがLinuxの強力なプロセス隔離メカニズムを活用して、CGIスクリプトを安全かつ効率的に処理できる能力です。さらに、Apacheは、ほぼすべてのプログラミング言語でCGIスクリプトを実行できるように構成でき、動的コンテンツ生成のための非常に多用途なツールとなっています。

インストールとセットアップ

CGIスクリプトを使用する前に、Apacheウェブサーバーを設定し、CGI実行のための環境を準備する必要があります。このプロセスは、ApacheがCGIスクリプトを正しく実行できるようにするために、いくつかの詳細な手順を含みます。

  1. Apacheのインストール:まず、UbuntuシステムにApacheウェブサーバーをインストールします。ターミナルを開き、次のコマンドを入力してください:

    sudo apt update
    sudo apt install apache2
  2. このコマンドは、パッケージリストを更新し、Apache 2ウェブサーバーをインストールします。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スクリプトが保存されているディレクトリにマッピングされるURLパスを設定します(ScriptAlias)。指定されたディレクトリ内で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が正常にインストールされ、実行されていることを確認するには、ウェブブラウザでサーバーのIPアドレスにアクセスしてください。デフォルトのApache Ubuntuのデフォルトページが表示されるはずです。

CGIスクリプトの作成

ApacheがCGIスクリプトを実行するように設定されたら、さまざまなプログラミング言語でスクリプトを作成し始めることができます。各スクリプトは実行可能であり、指定されたCGIディレクトリに存在する必要があります。Bash、Python、Perl、C/C++を使用してCGIスクリプトを作成するための詳細な手順に従ってください。

  1. CGIスクリプトの作成: HTMLコンテンツを出力するシンプルなBashスクリプトから始めます。お好きなテキストエディタを使用して、example-bash.shという名前のファイルを/usr/lib/cgi-bin/ディレクトリに作成してください。

    #!/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コンテンツを出力として送信し、それがウェブブラウザで表示されます。

  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を出力し、PerlにおけるCGIスクリプトの動作を示しています。

  7. 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;
    }

    CGI処理に適した実行可能ファイルを作成するためにCプログラムをコンパイルします:

    sudo gcc -o /usr/lib/cgi-bin/example-c /usr/lib/cgi-bin/example-c.c
  8. このステップでは、あなたのCソースコードをexample-cという名前の実行可能ファイルにコンパイルし、CGIディレクトリに保存します。これにより、ウェブサーバーによって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環境でCGIコンテンツを提供するためにJavaScriptを使用しています。

  12. PHP CGIスクリプト: PHPはCGIスクリプトとしても使用できます。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. このスクリプトはCGI目的のためにHTML出力を生成するためにGoを使用します。

  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スクリプトを作成した後、正しく機能することを確認するためにテストすることが重要です。これには、各スクリプトにウェブブラウザを介してアクセスし、それらが実行され、意図した出力を表示することを確認することが含まれます。

  1. CGIスクリプトへのアクセス: 作成した各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にアクセスすると、ウェブサーバーがそれを実行し、その出力をウェブページとして送信します。出力を確認して、正しく表示され、スクリプトから期待される内容を反映していることを確認してください。これにより、スクリプトが正しく機能しており、サーバーがCGIスクリプトを適切に処理するように構成されていることを確認できます。

結論

昔のものと見なされるかもしれませんが、CGIは効果的なシステム管理のために外部プログラミングスクリプトをウェブ環境に統合する強力な手段を提供します。このガイドに従うことで、Linuxサーバー上でさまざまな管理および監視タスクのためにCGIスクリプトを展開することができます。

関連記事: