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