Linux 上の CGI スクリプト: Apache CGI-bin の構成例
Common Gateway Interface (CGI) は、Web クライアントとサーバー間のリンクとして機能し、Web サーバー上でスクリプトやプログラムを実行できるようにする重要なテクノロジです。 CGI は新しいテクノロジにほぼ置き換えられていますが、Linux システム管理者にとって、Web ブラウザ経由でシステムを迅速に監視したり管理タスクを実行したりできる便利なツールであり続けています。
このチュートリアルでは次のことを学びます:
- Ubuntu Linux に Apache Web サーバーをインストールする方法
- さまざまなプログラミング言語で CGI スクリプトを作成および実行する方法
- Web ブラウザから CGI スクリプトにアクセスしてテストする方法
Linux 上の Apache を使用した CGI に関する興味深い事実
Linux 上の Apache は、その堅牢性と柔軟性により、歴史的に CGI の主要なプラットフォームの 1 つでした。新しいテクノロジの台頭にもかかわらず、CGI は、外部プログラムの生成を必要とするタスクや、Web サーバーでネイティブにサポートされていない言語でスクリプトを実行する場合に依然として関連性があります。注目すべき点の 1 つは、Linux の強力なプロセス分離メカニズムを活用して、CGI スクリプトを安全かつ効率的に処理できる Apache の機能です。さらに、Apache は、ほぼすべてのプログラミング言語で CGI スクリプトを実行するように構成できるため、動的コンテンツ生成のための非常に多用途なツールになります。
インストールとセットアップ
CGI スクリプトの使用を開始する前に、Apache Web サーバーをセットアップし、CGI 実行用の環境を準備する必要があります。このプロセスには、CGI スクリプトを実行するように Apache が適切に構成されていることを確認するためのいくつかの詳細な手順が含まれます。
Apache のインストール: まず、Ubuntu システムに Apache Web サーバーをインストールします。ターミナルを開き、次のコマンドを入力します。
$ sudo apt update sudo apt install apache2
CGI モジュールの有効化: Apache では、CGI スクリプトを実行するには CGI モジュールを有効にする必要があります。次のコマンドを実行して、このモジュールを有効にします。
$ sudo a2enmod cgi
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>
Apache を再起動して変更を適用します: 設定を構成した後、Apache を再起動してすべての変更が有効であることを確認します。
$ sudo systemctl restart apache2
- Apache のインストールの確認: Apache が正常にインストールされ、実行されていることを確認するには、Web ブラウザでサーバーの IP アドレスにアクセスします。デフォルトの Apache Ubuntu のデフォルト ページが表示されるはずです。
このコマンドはパッケージ リストを更新し、Apache 2 Web サーバーをインストールします。 Apache には、デフォルトの Web サイトと CGI スクリプトを実行する機能が事前に設定されています。
このコマンドは、CGI スクリプトの実行を処理するために必要な「cgi」モジュールを有効にします。
この設定では、CGI スクリプトが保存されているディレクトリ (ScriptAlias) にマップする URL パスを設定し、指定されたディレクトリで CGI スクリプトを実行できるようにし (Options +ExecCGI)、.cgi、.pl などの拡張子を持つファイルを Apache に通知します。 、.py、.sh、.rb、.go、.js、および .php は CGI スクリプト (AddHandler) として扱われ、すべてのユーザーがCGI スクリプト。セキュリティ ポリシーに基づいて制限する必要がある場合があります (すべて許可する必要があります)。
CGIスクリプトの作成
CGI スクリプトを実行するように Apache を構成したら、さまざまなプログラミング言語でスクリプトの作成を開始できます。各スクリプトは実行可能であり、指定された CGI ディレクトリに配置されている必要があります。 Bash、Python、Perl、および C/C++ を使用して CGI スクリプトを作成するには、次の詳細な手順に従ってください。
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
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
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
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
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
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
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
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
Tcl CGI スクリプト: Tcl は、CGI スクリプトに適したもう 1 つのスクリプト言語です。 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
このスクリプトは、HTTP ヘッダーと HTML コンテンツを出力として送信し、Web ブラウザーで表示されます。
このスクリプトは、Python を使用して HTML を出力し、Bash スクリプトと同様の機能を実行します。
この Perl スクリプトは HTML をブラウザに出力し、Perl で CGI スクリプトがどのように機能するかを示します。
この手順では、C ソース コードを example-c
という名前の実行可能ファイルにコンパイルします。このファイルは CGI ディレクトリに保存され、Web サーバーによって CGI スクリプトとして実行できるようになります。この例では、CGI スクリプトとしてコンパイルされた C プログラムを使用して HTML コンテンツを出力する方法を示します。
このスクリプトは、前の例と同様ですが、Ruby を使用して HTML コンテンツを出力します。
この例では、Node.js 環境で JavaScript を使用して CGI コンテンツを提供します。
この PHP スクリプトは、Web サーバー経由でアクセスされると HTML コンテンツを生成します。
このスクリプトは Go を使用して CGI 用の HTML 出力を生成します。
このスクリプトは、Tcl を使用して HTML コンテンツを生成する CGI 機能を示します。
CGI スクリプトのテスト
さまざまなプログラミング言語で CGI スクリプトを作成した後、それらが正しく機能することを確認するためにテストすることが重要です。これには、Web ブラウザを介して各スクリプトにアクセスして、スクリプトが実行され、意図した出力が表示されることを確認することが含まれます。
CGI スクリプトへのアクセス: Web ブラウザを使用して、作成した各 CGI スクリプトに移動します。たとえば、Bash CGI スクリプトにアクセスするには、次を使用します。
http://cgi-example.local/cgi-bin/example-bash.sh
- CGI 出力の表示: スクリプトの URL にアクセスすると、Web サーバーはスクリプトを実行し、その出力を Web ページとして送信します。出力をチェックして、正しく表示され、スクリプトから期待される内容が反映されていることを確認します。これにより、スクリプトが適切に機能しており、CGI スクリプトを処理するようにサーバーが正しく構成されていることを確認できます。
同様に、example-bash.sh
を、example-python.py
、example-perl.pl
、< などの他のスクリプトの名前に置き換えます。example-ruby.rb などを使用して、これらのスクリプトをテストします。
結論
CGI は時代遅れだと思われるかもしれませんが、外部プログラミング スクリプトを Web 環境に統合して効果的なシステム管理を行うための強力な方法を提供します。このガイドに従うことで、Linux サーバー上のさまざまな管理および監視タスク用の CGI スクリプトを展開できます。