web-dev-qa-db-ja.com

Apache / Httpdを使用してCentOS 7でPerl CGIスクリプトを実行する

私のCGI PerlスクリプトCentOS 7が正しく実行されていません。それらはプレーンテキストとして表示されるか、サーバーエラーが発生します。

スクリプトをデフォルトの/var/www/cgi-binディレクトリに配置しましたが、うまくいきませんでした。

CGIスクリプトを/var/www/html/another-dirに配置しようとしましたが、それらはプレーンテキストとして表示されるだけです。

4
Joseph

これは、CentOS 7でCGI Perlスクリプトを正しく実行する方法です。

インターネット上の多くのリソースが手順を組み合わせておらず、私のような人々を非常に混乱させているように見えるので、私はこれをここに残します。

つまり、これは実行する必要があることです。

  1. ソフトウェアをインストールする。
  2. テストCGIファイルを作成します。
  3. CGIモジュールがロードされていることを確認します。 httpd.confの内部。
  4. httpd.confのディレクトリ設定を変更します。
  5. CGIを実行できるようにアクセス許可を変更します。

ソフトウェアのインストールと構成

Sudo yum update
Sudo yum install httpd
Sudo yum install Perl perl-CGI
Sudo systemctl start httpd.service
Sudo systemctl enable httpd.service

テストCGIファイルを作成します

これらの手順を最後まで行っても、/var/www/cgi-bin内のCGIスクリプトを読み込んで、httpd.conf内のWebルートを変更せずに読み込むことはありませんでした。代わりに、別のディレクトリでCGIをアクティブ化することにしました。

私のサーバーでは、CGIファイルを保持するWebルートhtmlが必要です。これは/var/www/html/hello.cgiです

#!/usr/bin/Perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";

CGIモジュールがロードされていることを確認します。内部httpd.conf

コマンドでこれを簡単に確認できます。

grep -n "LoadModule" /etc/httpd/conf/httpd.conf

CGIモジュールが指定されていないことがわかり、次のようにしてモジュールフォルダー内にそれらの存在を確認しました。

find /etc/httpd/modules/ -iname "*cgi*"

これは私が求めているものです:

/etc/httpd/modules/mod_cgi.so

それを/etc/httpd/conf/httpd.confファイルに追加しましょう:

LoadModule cgi_module modules/mod_cgi.so

buntuでは別の方法でモジュール をロードする必要があると思います。

httpd.confのディレクトリ設定を変更します

httpdを再起動する前に、/etc/httpd/conf/httpd.conf内のもう1つ変更する必要があります。

<Directory "var/www/html">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

多くのGooglingsによると、上記と同じディレクトリを指すようにhttpd.confファイルのこの部分も変更する必要がある場合があります"var/www/html"

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

私は変更しませんでした。違いを生むようには見えませんでした。

CGIが実行できるようにアクセス許可を変更します

そして、これは私をたくさん立ち往生させました!これを見逃さないでください!

これらのCGIスクリプトをプログラムとして実行できることをサーバーに通知する必要があります。

chmod 705 *.cgi

または、個々のCGIスクリプトをターゲットにすることもできます。

chmod 705 hello.cgi

インターネット の一部の人々は、chmod 755および777も機能する可能性があると言っています。)

httpdを次のように再起動します。

Sudo systemctl restart httpd.service

この時点で、私のCGIスクリプトはHTMLに正しくレンダリングされています。

次のようにWebルートから提供されます:http://<IP>/hello.cgi

他の人に役立つ情報を追加してください。

7
Joseph

(インターネット上の一部の人々は、chmod 755と777も機能する可能性があると言っています。)

サーバーを他のユーザーと共有している場合、および一般的に攻撃の可能性があるため、755、705、または777の/ any /を使用してはいけません。これらは、サーバーにログオンしている他のユーザーに、選択した引数を持つスクリプト。代わりに、スクリプトとその上のすべてのディレクトリにnginx、Apache、またはWebサーバーを実行しているユーザー/グループがあり、所有者またはグループとして(コマンドchownまたはchgrpを使用して)スクリプトを実行することになっていることを確認してください。次に、chmodの3番目のビットを0に設定します(750を超えるものは使用しないでください)。これは、サーバー上の他のユーザー(侵入者であれ正当なユーザーであれ、nginx/Apacheを除く)が/ no/businessを持っているためです。シェルからスクリプトを実行、読み取り、変更する。

Linuxファイルの権限については、次のURLで確認できます。 https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps#octal または https ://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions など

幸運を!

編集:これは、ユーザーのひよこが1月28日に書いたものの説明です-良い呼び出しです。チュートリアルでは、権限が許容範囲を超えています。

1
user29340

もう1つ注意する必要があるのは、Windows環境でコードを記述してからサーバーにリモートでアップロードする場合は、ファイルをnix EOLに変換するようにしてください(特にNotepad ++を使用する場合は、編集メニュー);そうしないと、サーバーエラーが発生します。

0
Nizar