48

KubuntuPerlCGIスクリプトを実行するようにApache2を実行するように設定したいと思います。グーグルで出くわしたいくつかの手順を試しましたが、何も機能していないようです。

これを達成する正しい方法は何ですか?

4

8 に答える 8

23

この投稿は、*Ubuntu で Perl 用の Apache2 を適切にセットアップできないことに苦しんでいる人々を救うことを目的としています。(Linux マシンに固有のシステム構成は、[this] のように角括弧内に記載されます)。

Apache 2 のセットアップが不適切な場合に考えられる結果:

  1. 実行して結果を表示する代わりに、ブラウザが .pl ファイルをダウンロードしようとしています。
  2. 禁断。
  3. 内部サーバーエラー。

合理的な知性を持って以下に説明する手順に従えば、上記のエラーを乗り越えることができます。

手順を開始する前に。ファイルに移動し/etc/hosts、IP アドレス / ドメイン名` を追加します。例:

127.0.0.1 www.BECK.com

ステップ 1: インストールapache2 ステップ 2: インストールmod_perl ステップ 3: 構成apache2

以下を開いsites-available/defaultて追加します。

<Files ~ "\.(pl|cgi)$">
    SetHandler perl-script
    PerlResponseHandler ModPerl::PerlRun
    Options +ExecCGI
    PerlSendHeader On
</Files>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that's a story for another day. Let's concentrate on washing out the issue at hand)
####
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]

<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .pl
    Order allow,deny
    allow from all
</Directory>
<Files ~ "\.(pl|cgi)$">
    SetHandler perl-script
    PerlResponseHandler ModPerl::PerlRun
    Options +ExecCGI
    PerlSendHeader On
</Files>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that's a story for another day. Let's concentrate on washing out the issue at hand)
####
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]

<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .pl
    Order allow,deny
    allow from all
</Directory>

ステップ 4:

次の行をファイルに追加し/etc/apache2/apache2.confます。

AddHandler cgi-script .cgi .pl
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>

<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

<Files ~ "\.pl$">
Options +ExecCGI
</Files>

ステップ 5:

非常に重要、または少なくともそうだと思いますが、このステップを実行した後でのみ、機能するようになりました。

AddHandler cgi-script .cgi .pl

<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>

<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

<Files ~ "\.pl$">
Options +ExecCGI
</Files>

ステップ 6

非常に重要、または少なくともそうだと思いますが、このステップを実行した後でのみ、機能するようになりました。

/etc/apache2/sites-enabled/000-default以下をファイルに追加します

<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>

ステップ 7:

ここで、Perl スクリプトを test.pl として、ステップ 3 で前述した場所に [ path-where-you-want-your-.pl-and-.cgi-files ] として追加します。

.plを使用してファイルにアクセス許可を付与し、ブラウザのアドレス バーに をchmod入力します。webaddress/cgi-bin/test.pl

(さて、この投稿では多くのことが冗長になっているでしょう。無視してください。)

于 2010-11-28T11:41:12.303 に答える
20

「内部サーバー エラー」の内容を確認するには、Apache エラー ログを確認する必要があります。私の経験では、最も可能性の高い 4 つのケースは次のとおりです。

  1. CGI プログラムは、CGI の実行が有効になっていないディレクトリにあります。解決策: ExecCGIhttpd.conf または .htaccess ファイルを使用して、そのディレクトリにオプションを追加します。

  2. Apache は、専用のcgi-binディレクトリから CGI を実行するようにのみ構成されています。解決策: CGI プログラムをそこに移動するか、AddHandler cgi-script .cgiステートメントを httpd.conf に追加します。

  3. CGI プログラムが実行可能に設定されていません。解決策 (*nix タイプのオペレーティング システムを想定):chmod +x my_prog.cgi

  4. CGI プログラムはヘッダーを送信せずに終了しています。解決策: コマンド ラインからプログラムを実行し、a) コンパイル時エラーで停止するのではなく、実際に実行されること、および b) 正しい出力が生成されることを確認します。これには、少なくともContent-Typeヘッダーと空白行が含まれている必要があります。最後のヘッダーに続きます。

于 2009-02-18T12:32:51.743 に答える
17

(perlを求めなかったにもかかわらず、Google検索でこの質問にたどり着きました)

スクリプトの実行に問題がありました (perl ではなく bash ですが)。Apache には の構成がありましたが、ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/Apache エラー ログにはFile does not exist: /var/www/cgi-bin/test.html.

両方にスクリプトを入れよう/usr/lib/cgi-bin/としまし/var/www/cgi-bin/たが、どちらも機能していませんでした。

長時間のグーグルセッションの後、私にとってそれをクラックしたのは sudo a2enmod cgi/usr/lib/cgi-bin/.

于 2015-03-02T11:37:38.360 に答える
5

Ubuntu 12.04 (Precise Pangolin) (およびおそらく 1 つまたは 2 つ前のリリース) では、Synaptic を介してインストールし、CGI スクリプトを /usr/lib/cgi-bin に配置するだけでapache2十分mod-perlです。

于 2012-09-07T21:51:16.630 に答える
2

CGI スクリプトを処理するには、2 つの方法がありSetHandlerますAddHandler

SetHandler cgi-script

は、指定されたコンテキストindex.html内のすべてのファイルに適用されますstyle.css

AddHandler cgi-script .pl

は似ていますが.pl、特定のコンテキストで , で終わるファイルに適用されます。必要に応じて、別の拡張機能または複数の拡張機能を選択できます。

さらに、CGI モジュールをロードしてOptions +ExecCGI構成する必要があります。モジュールを有効にするには、次を発行します。

a2enmod cgi

Apache を再起動またはリロードします。最後に、Perl CGI スクリプトは実行可能でなければなりません。したがって、実行ビットを設定する必要があります

chmod a+x script.pl

そして、それはで始まる必要があります

#! /usr/bin/perl

その最初の行として。


SetHandleror AddHandler(and ) をディレクティブの外で使用するOptions +ExecCGIと、すべてのファイルにグローバルに適用されます。ただし、これらのディレクティブを内部で囲むことにより、コンテキストをサブセットに制限できます。Directory

<Directory /path/to/some/cgi-dir>
    SetHandler cgi-script
    Options +ExecCGI
</Directory>

SetHandlerWeb サイトのすべてのファイルではなく、/path/to/some/cgi-dir 内のファイルにのみ適用されるようになりました。もちろん、 orディレクティブAddHandler内でも同じです。次に、/path/to/some/cgi-dir 内のファイルに適用され、.DirectoryLocation.pl

于 2016-06-26T21:08:46.763 に答える
1

私のように、今すぐ知る必要があるよりもはるかに多くのチュートリアルやドキュメントを手探りしていて、初心者向けに機能することを確認したいだけの人のために、私が持っていた唯一のものを見つけました追加することでした:

AddHandler cgi-script .pl .cgi

私の設定ファイルに。

http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler

私の状況では、perl スクリプトを好きな場所に置き、.pl または .cgi 拡張子を追加するだけでよいので、これが最もうまく機能します。

Dave Sherohman の回答では、 AddHandler ソリューションについても言及しています。

もちろん、スクリプトの権限/所有権が正しく設定されていること、特にスクリプトが実行可能であることを確認する必要があります。http リクエストから実行する場合は、「ユーザー」が誰であるかをメモしておいてください (www または www-data など)。

于 2014-03-07T17:26:11.787 に答える