
Ubuntu日本語フォーラム

ログインしていません。
apache2をインストールしcgiを動作させようとしましたが、設定方法がわかりません。(色々なサイトを見てたんですが理解出来ませんでした)
sudo apt-get install apache2
でインストール
sudo gedit /etc/apache2/apache2.conf
でServerRoot "/etc/apache2" →ServerRoot "/var/www"
ローカルホスト(http://localhost/)
で/var/www/index.html は問題なく動作しました。
次はcgiなんですが。
デフォルトのままなので、/usr/lib/cgi-bin に
#!/usr/lib/cgi-bin/
print "Content-Type: text/html\n\n";
print "\n";
print "\n";
print "ようこそ!
\n";
print "\n";
print "\n";
index.cgiとして保存しアクセスをしました。
http://localhost/cgi-bin/index.cgi
すると500 Internal Server Errorが表示されたので、apache2のエラーログを見ました。
/var/log/apache2/error.log
[Tue May 19 12:30:28 2009] [error] (13)Permission denied: exec of '/usr/lib/cgi-bin/index.cgi' failed
[Tue May 19 12:30:28 2009] [error] [client ::1] Premature end of script headers: index.cgi
どうやらパーミッションエラーのようで、755などにすれば直るのでしょうか?
index.cgiファイルの右クリックでアクセス権を見ると
所有者 root 読み書き
グループ root 読み込み専用
その他 読み込み専用
となっておりました。
どのようにすればcgiは動作してくれるのでしょうか?
分かる方いましたら教えてください。
phpはアクセス権を与えなくても動作しております。
オフライン
*.cgiの拡張子による実行は、特に、(CGIを含めた)他の拡張子の定義とは区別して考えた方が良いかと思います。
# 1行目って・・・これで大丈夫なんでしたっけ?もしあるなら、調査(考慮)する対象を少なくする為に動作実績のあるファイルを用いることをお勧めします。
とくに、1行目の#!/usr/bin/sh等をを用いて実行するのであれば、コマンドプロンプトから(相対パス、もしくは、絶対パスで)ファイルを指定して、実行できる必要性があります(sh hogehogeとか、perl hogehogeと、処理するコマンドをつけずに)
# *.cgiの拡張子には、apacheに対して、「何かよくわからないけど、実行できるはずのファイル」という情報しか定義していないはずです。なので、上記のようにunixの標準的な実行に関するパーミッションがチェックされます。*.phpや、*.plの定義の場合、大抵、それぞれの拡張子にはmod_phpで処理する とか、mod_perlで処理する とか、定義していると思います。と、すると、ファイルのパーミッションのチェックは各モジュールで行われます。
で、今回の件は、やはり、ファイルのパーミッションだと思うところです。
なお、パーミッションは最終的には、必要な権限のみを与えるようにしてください(ローカル環境ではなく、プロバイダを利用する場合は、プロバイダの指示に従ってください)
オフライン
次はcgiなんですが。
デフォルトのままなので、/usr/lib/cgi-bin に
#!/usr/lib/cgi-bin/
print "Content-Type: text/html\n\n";
print "\n";
print "\n";
print "ようこそ!
\n";
print "\n";
print "\n";
index.cgiとして保存しアクセスをしました。
http://localhost/cgi-bin/index.cgi
すると500 Internal Server Errorが表示されたので、apache2のエラーログを見ました。
/var/log/apache2/error.log
[Tue May 19 12:30:28 2009] [error] (13)Permission denied: exec of '/usr/lib/cgi-bin/index.cgi' failed
[Tue May 19 12:30:28 2009] [error] [client ::1] Premature end of script headers: index.cgi
どうやらパーミッションエラーのようで、755などにすれば直るのでしょうか?
index.cgiファイルの右クリックでアクセス権を見ると
所有者 root 読み書き
グループ root 読み込み専用
その他 読み込み専用
となっておりました。
どのようにすればcgiは動作してくれるのでしょうか?
分かる方いましたら教えてください。
phpはアクセス権を与えなくても動作しております。
まずは、一行目が変でしょうね。chmod +xしてあるのであれば、
まずは、/usr/lib/cgi-binのディレクトリでそのシェルスクリプトが動作するかどうか
確認してみてください。
その上で、Apacheからエラーが出るようであれば、Permissionの疑いが
強くなりますが、その場合には、試験的にchmod 777をやってみても
いいのでは?
オフライン
kazu53000 による投稿:
sudo gedit /etc/apache2/apache2.conf
でServerRoot "/etc/apache2" →ServerRoot "/var/www"
まずここが間違い
Apache2 の解説書などを入手して、ServerRoot で何を設定しているのかを調べ直しましょう
なお、html ファイルなどの公開ファイルを保存するディレクトリは、/etc/apache2/sites-enabled/000-default ファイルの中で DocumentRoot /var/www/ として設定されてます
ちなみに CGI のためのディレクトリも /etc/apache2/sites-enabled/000-default ファイルの中で ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ が設定されてます
kazu53000 による投稿:
次はcgiなんですが。
デフォルトのままなので、/usr/lib/cgi-bin に
#!/usr/lib/cgi-bin/
print "Content-Type: text/html\n\n";
print "\n";
print "\n";
print "ようこそ!
\n";
print "\n";
print "\n";
index.cgiとして保存し
index.cgi を CGI で動かすときの言語は何を使っているつもりですか?
PHP などのスクリプト言語だと予想しますが、そうであれば一行目はその言語インタープリタを起動するためのパスを書かなくてはなりません
#!/usr/lib/cgi-bin/ という言語インタープリタは存在しませんよね
AcriptAlias で指定されたディレクトリに CGI のためのプログラムを置く場合、そのプログラムを単体で直接実行して、正しく動作しないといけません
作成した index.cgi ファイルを直接実行して、正しく動作するかを確認することから始めてください
正しく動作するまでは、いくら apache2 の設定を弄ろうとも無意味です
オフライン
みなさんレス有り難うございます!
(2回も再インストールしてました)
レンタルサーバーはいろいろ借りて知識がある程度はあったのですが、自分でサーバーを建てると全然違いますね。
まだまだ自分には、みなさんがアドバイスしていることを理解できていないので、まずは参考書を購入して意味や役割
などを理解してからすすめていこうと思います。
Ubuntuで作るLinuxサーバー
というのを見つけたので、これから読んで勉強させて頂きます。
レス有り難うございます!
ubuntuの自宅サーバーってあまり本でてないんですね・・・。
オフライン