私のCGI PerlスクリプトCentOS 7が正しく実行されていません。それらはプレーンテキストとして表示されるか、サーバーエラーが発生します。
スクリプトをデフォルトの/var/www/cgi-bin
ディレクトリに配置しましたが、うまくいきませんでした。
CGIスクリプトを/var/www/html/another-dir
に配置しようとしましたが、それらはプレーンテキストとして表示されるだけです。
これは、CentOS 7でCGI Perlスクリプトを正しく実行する方法です。
インターネット上の多くのリソースが手順を組み合わせておらず、私のような人々を非常に混乱させているように見えるので、私はこれをここに残します。
つまり、これは実行する必要があることです。
httpd.conf
の内部。httpd.conf
のディレクトリ設定を変更します。ソフトウェアのインストールと構成
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
他の人に役立つ情報を追加してください。
(インターネット上の一部の人々は、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つ注意する必要があるのは、Windows環境でコードを記述してからサーバーにリモートでアップロードする場合は、ファイルをnix EOLに変換するようにしてください(特にNotepad ++を使用する場合は、編集メニュー);そうしないと、サーバーエラーが発生します。