このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。 |
Perlで作ったCGIのデバッグにとても便利そうなのでMac OS Xの Apache(WEB共有と読んだ方が良いですかね?)をいじくって います。 httpd.confが見つからなくてサーバの設定をどこですればいいの かわからなくて困っています。 どこで設定するもんなんでしょう?どなたか御存じないでしょうか?
稲垣 さんからのコメント
( Friday, March 30, 2001 18:34:50 )
ちょっと探してみました。 見たらそれ程分からない場所にはないですよ。 ただし、Finderからは見えない場所にありますので、Terminalでみる 必要があるかと思います。以下のファイルです。 /etc/httpd/httpd.conf 編集をするには、直接Terminalで編集するか、TerminalにてFinderに 見える場所にコピーすればOKでしょう。
hightide さんからのコメント
( Friday, March 30, 2001 23:46:40 )
稲垣さんありがとうございます。&勉強不足すいませんm(_ _)m。 つまらない質問をしてしまったようですが、わからないなりにApacheの マニュアルを目がギンギンになるまで徹夜でよんで、ディレクトリを 片っ端からひらいて探してみたのですがさっぱり検討もつかず、 できるだけの努力はしてみてもわからなかった上での質問ですので、どう かお許しください。 Terminalでlsするのとディレクトリ構成がなにかちがうような感じがして いたのですが、なにぶん見たこともないファイルやディレクトリ名だらけ なので、Finderから見えない項目があることに気がつけませんでした。 分かってみるとあまりにもあっけなくて自己嫌悪(涙)。はぁ〜、なさけ ないです。
hightide さんからのコメント
( Saturday, March 31, 2001 01:39:13 )
すいません。分かったつもりになっただけでした。 UNIXはほとんど触ったことがないので根本的におかしなことを やっていそうなのですが恥のかきついでですので試してみたこ とを書きます。 cpでhttpd.confを自分のディレクトリへコピーしてTextEditで 編集しました。で、cpで再度、ファイルを入れ替えようと思った のですがOperation not permittedになってしまいました。 ls -lで確認すると/etc/httpd/httpd.confが読み込み専用になって います。 -rw-r--r-- 1 root wheel 35400 Feb 17 12:33 httpd.conf そこでchmodで変更しようとおもったのですが chmod: httpd.conf: Operation not permitted となりました。viで直接、編集しようとしてもread onlyのため 保存するときにおこられました。 オーナーがrootになっているから書き換えできないのだと考えて suしたりログアウトしてrootでログインしなおそうとおもったら 考えてみたらMac OS Xだとrootアカウントは自動的に作成される みたいでパスワードを設定した覚えがありません。TILにもそのよ うな記述がありました。 さらにTILで検索してみたらMac OS X Serverでrootのパスワードを 紛失した場合の対応がかかれていたのでもしかしたらうまくいく かも?と sh /etc/rc 等々、試みましたがうまくききませんでした。 どうすればhttpd.confが書き換えられるのでしょうか?
hightide さんからのコメント
( Saturday, March 31, 2001 02:13:45 )
自己解決?できたっぽいので御報告します。 rootのパスワードですが、アプリケーションのUtilitiesの NetInfo Managerで設定できました。 メモをとらなかったので記憶間違いがあるかもしれませんが手順は だいたいこんな感じでした。 ドメインメニューのセキュリティーのサブメニューの認証を選択 表示されるウインドウに自分のユーザーIDとパスワードを入力 グレイアウトされていたドメインメニューのセキュリティーの ルートパスワードの変更が有効になります。 自分の設定したいパスワードを設定します。 で、Terminalを起動します。 suと入力してリターン パスワードを要求されるので設定したrootのパスワードを入力 /etc/httpd/へ移動してchmodでパーミッションを変更 viで編集 chmodでパーミッションを戻す という感じでした。おさわがせしました。
みうら さんからのコメント
( Saturday, March 31, 2001 10:36:23 )
> /etc/httpd/へ移動してchmodでパーミッションを変更 > viで編集 > chmodでパーミッションを戻す パーミッションをどのように変更したかは解りませんが、既にrootになってい るので、パーミッション変える必要はないのでは?
hightide さんからのコメント
( Saturday, March 31, 2001 12:50:30 )
>パーミッションをどのように変更したかは解りませんが、既にrootになってい >るので、パーミッション変える必要はないのでは? そうですね。 無駄な操作ですね。間違ったことを書いてしまったようです。 また、恥っさらしです(恥)。何時間も同じような操作をぐちゃ ぐちゃと繰り返していると、なにがなんだかわからなくなってし まうもので、、、信用してしまった皆様、ごめんなさいm(_ _)m。
石津@RJC さんからのコメント
( Saturday, March 31, 2001 13:08:22 )
MacOSXではrootアカウントで作業することはあまり推奨されていないようです。 わざわざrootのパスワードを設定していないが、そういう意図なのでしょう。 通常は最初に設定したユーザで以下のようにすれば編集することができます。 sudo vi /etc/httpd/httpd.conf このコマンドを入力するとsudoで管理者として作業することができます。 コマンド入力後にpasswordを聞かれますが、この場合にはログインしている ユーザのパスワードを再度入力すればOKです。
稲垣 さんからのコメント
( Saturday, March 31, 2001 14:21:17 )
すこし蛇足ですが、MacOS Xに同梱されているバージョンは1.3.14です。 最新版は1.3.19で、AppleのOS Xのダウンロードから入手可能です。 セキュリティ関連のバグフィックスだそうです。テストで外部公開しな いのであれば大丈夫だと思いますが、公開用であれば最新版を使うことを お勧めします。
hightide さんからのコメント
( Sunday, April 01, 2001 00:25:30 )
公開はかんがえていませんので、というか私の技量でそんなこと したら社会の迷惑です。はい。 質問ばかりで申し訳ないのですが、CGIとSSIをユーザーの ディレクトリで実行できるようにしたいのですがhttpd.conf の書き換え方がわからなくて困っています。 apacheのマニュアルや下記のページなどを参考にして かれこれ10何時間かずっとやっているのですが、うまくいき ませんでした。 質問の前に自分が試したことを報告するべきなのでしょうが ためしたことが多すぎてなにを試したのか説明できないので お許しください。すいません。 apacheでユーザー毎にcgiを配置可能にする http://sugisugi.hoops.ne.jp/apache-conf.htm Apache Maniax http://www.cc.sakura.ad.jp/apache/beginner/httpd-conf.html ちょ〜簡単Apache For Win32 (win95,win98) の初心者向け設定 http://www.sosb.com/tyukio/apache/#httpd.conf
hightide さんからのコメント
( Sunday, April 01, 2001 17:14:47 )
ここまでに試してみたことをまとめてみました。 UNXI初心者ですのでまったく検討違いなことしているのかもしれませんが、 アドバイスをいただけると助かります。よろしくお願いします。 まずperlが動くかをチェック which perl でパスを確認してテスト用のCGIを書き換えて、 perl test.cgi で、TerminalでCGIスクリプト実行するとCGIスクリプトの出力が Terminalに表示されました。 #余談ですがMac OS XのTerminalが漢字に対応していないのか フォントをOsaka等幅に変更しても正常に漢字が表示できません でした。 次にhttpd.confとmime.typesの書き換えに取り組みました。 sudoコマンドを教えていただいたのでviで作業することもでき るのですが、viに不馴れというかほとんど使えないので、あえ てsuでrootになって作業しました。 具体的にはcpコマンドで自分のユーザーディレクトリにコピー してTextEditで編集して、また/etc/httpd/へcpするといった 手順です。 次にhttpd.confからいじりはじめたのですが、ごちゃごちゃし ているのでそれはあとで書きます。 mime.typesを前述のようにユーザーディレクトリにコピーして TextEditで application/x-httpd-cgi cgi pl と書き加えて上書き保存、Terminalでcpで/etc/httpd/へ コピーしました。 httpd.confですが、すでにいじったり戻りたりをくり返して いるので正確に何をしたのか忘れていますが、 httpd.conf.defaultと見比べて考えてみると、 #AddHandler cgi-script .cgi #AddType text/html .shtml #AddHandler server-parsed .shtml から#をとりました。 あと AccessFileName .htaccess ですが、.htaccessとファイルに名前をつけてようとするFiderから警告を受けるので、ひとまず AccessFileName _htaccess に変更しました。 #あえて書き換えたのは、Terminalでmvしても、ftpで名前を書き換えてもファイルが削除されてしまうような感じです。ftpだと成功してるように見えるのですが、いつの間にか消えてしまいます。Terminalでlsしても見つかりません。 _htaccessの内容ですが、 Options All AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl DirectoryIndex index.shtml index.html index.cgi index.htm AddType text/x-server-parsed-html .html としました。テストのためにAddType application/x-httpd-cgi .cgiの一行だけにしたり、いろいろと組み合わせをかえてためしましたがダメでした。 で、さらにhttpd.confを書き換えることにしました。 <Directory "/Library/WebServer/Documents">の Options Indexes FollowSymLinks MultiViews AllowOverride None を Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All にしてみました。他にも組み合わせをかえたりしましたが、、、 それで <Directory /> Options FollowSymLinks AllowOverride None </Directory> を <Directory /> Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All </Directory> にかえてみましたが、ブラウザでアクセスすると403 Forbiddenと なりました。 あとScriptAliasのあたりの <Directory "/Library/WebServer/CGI-Executables"> AllowOverride None Options None Order allow,deny Allow from all </Directory> を <Directory "/Library/WebServer/CGI-Executables"> AllowOverride All Options Indexes FollowSymLinks MultiViews ExecCGI Order allow,deny Allow from all </Directory> などしてみました。403 Forbiddenとなりました。 以上のような状況です。よろしくおねがいします。
hightide さんからのコメント
( Sunday, April 01, 2001 17:17:37 )
改行失敗しました。すいません。 ここまでに試してみたことをまとめてみました。 UNXI初心者ですのでまったく検討違いなことしているのかもしれませんが、 アドバイスをいただけると助かります。よろしくお願いします。 まずperlが動くかをチェック which perl でパスを確認してテスト用のCGIを書き換えて、 perl test.cgi で、TerminalでCGIスクリプト実行するとCGIスクリプトの出力が Terminalに表示されました。 #余談ですがMac OS XのTerminalが漢字に対応していないのか フォントをOsaka等幅に変更しても正常に漢字が表示できません でした。 次にhttpd.confとmime.typesの書き換えに取り組みました。 sudoコマンドを教えていただいたのでviで作業することもでき るのですが、viに不馴れというかほとんど使えないので、あえ てsuでrootになって作業しました。 具体的にはcpコマンドで自分のユーザーディレクトリにコピー してTextEditで編集して、また/etc/httpd/へcpするといった 手順です。 次にhttpd.confからいじりはじめたのですが、ごちゃごちゃし ているのでそれはあとで書きます。 mime.typesを前述のようにユーザーディレクトリにコピーして TextEditで application/x-httpd-cgi cgi pl と書き加えて上書き保存、Terminalでcpで/etc/httpd/へ コピーしました。 httpd.confですが、すでにいじったり戻りたりをくり返して いるので正確に何をしたのか忘れていますが、 httpd.conf.defaultと見比べて考えてみると、 #AddHandler cgi-script .cgi #AddType text/html .shtml #AddHandler server-parsed .shtml から#をとりました。 あと AccessFileName .htaccess ですが、.htaccessとファイルに名前をつけてようとする とFiderから警告を受けるので、ひとまず AccessFileName _htaccess に変更しました。 #あえて書き換えたのは、Terminalでmvしても、ftpで名前 を書き換えてもファイルが削除されてしまうような感じで す。ftpだと成功してるように見えるのですが、いつの間に か消えてしまいます。Terminalでlsしても見つかりません。 _htaccessの内容ですが、 Options All AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl DirectoryIndex index.shtml index.html index.cgi index.htm AddType text/x-server-parsed-html .html としました。テストのために AddType application/x-httpd-cgi .cgiの一行だけにしたり、 いろいろと組み合わせをかえてためしましたがダメでした。 で、さらにhttpd.confを書き換えることにしました。 <Directory "/Library/WebServer/Documents">の Options Indexes FollowSymLinks MultiViews AllowOverride None を Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All にしてみました。他にも組み合わせをかえたりしましたが、、、 それで <Directory /> Options FollowSymLinks AllowOverride None </Directory> を <Directory /> Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All </Directory> にかえてみましたが、ブラウザでアクセスすると403 Forbiddenと なりました。 あとScriptAliasのあたりの <Directory "/Library/WebServer/CGI-Executables"> AllowOverride None Options None Order allow,deny Allow from all </Directory> を <Directory "/Library/WebServer/CGI-Executables"> AllowOverride All Options Indexes FollowSymLinks MultiViews ExecCGI Order allow,deny Allow from all </Directory> などしてみました。403 Forbiddenとなりました。 以上のような状況です。よろしくおねがいします。
今井真人 さんからのコメント
( Sunday, April 01, 2001 22:07:43 )
>403 Forbidden のところだけから推測すると、test.cgiをchmodコマンドで実行 オプションが つけられていますか? ls -lなどで確認可能です。
しあわせのツボ さんからのコメント
( Sunday, April 01, 2001 22:23:38 )
.htaccessが見えないのは仕様ではないでしょうか。 通常、lsコマンドは.で始まるファイルを表示しません。 ls -a とすれば見つかると思います。
hightide さんからのコメント
( Sunday, April 01, 2001 22:40:49 )
コメントありがとうございます。 >>403 Forbidden >のところだけから推測すると、test.cgiをchmodコマンドで実行 >オプションが つけられていますか? > >ls -lなどで確認可能です。 はい。それは書き忘れただけで確認済みです。chmod 705 test.cgi とかしたとおもうんですが、現在は-rwx---r-xになっています。 >.htaccessが見えないのは仕様ではないでしょうか。 >通常、lsコマンドは.で始まるファイルを表示しません。 >ls -a とすれば見つかると思います。 ls -aで見れました。なるほどこういう仕様があったんですね。 あとls -alとオプションを重ねることもできるんだと先程、 気が尽きました(笑)。
hightide さんからのコメント
( Sunday, April 01, 2001 22:59:35 )
コメントしていただいたことを参考に取り組んでみましたので結果を 御報告します。 書き換えたhttpd.confの AccessFileName _htaccess を AccessFileName .htaccess に戻してシステム環境設定の「共有」で、WEB共有をいったん「停止」し、 再度「共有開始」してから、ブラウザでアクセスしてみましたがまた 403 Forbiddenでした。 前々回の書き込みで、書きませんでしたがhttpd.confなどを書き換えた後は 毎回、システム環境設定の「共有」で、WEB共有をいったん「停止」し、 再度「共有開始」という手順でサーバーを再起動しています。というか再起 動してるつもりですが、これもTerminalでないと本当はダメなのかなぁ。 うーん、SOFT BANK BOOKSの「FreeBSD 2.2.5Jサーバ構築ガイド」という 書籍を参考にDos/V機で同じことをしたときはあっけなく動いてくれたん ですが、応用力なさ過ぎですねぇ(涙)。なさけなや〜。
今井真人 さんからのコメント
( Sunday, April 01, 2001 23:16:00 )
apacheのerror.logはどのような出力が出ていますか?ここらで 判断すれば大抵のことはわかります。
hightide さんからのコメント
( Sunday, April 01, 2001 23:36:24 )
error_log(で良いですよね?)ですが、最後のエラーは下記のように なっております。 Options ExecCGI is off in this directory: /Users/hightide/Sites/env.cgi env.cgiもパーミッションの設定を行ってあります。Sitesディレクトリは drwxr-xr-x 17 hightide wheel 534 Apr 1 22:40 Sites となっています。
しあわせのツボ さんからのコメント
( Monday, April 02, 2001 00:51:26 )
Apacheをインストールすると通常はCGI不可になっていますが、 それを単純に可とした時のデフォルトは 「各々の cgi-bin/ 以下にあるファイルのみCGIとして実行する」 じゃなかったかと思います。 エラーを見る限り、これに引っ掛かっているような気がします。 記憶違いだったらすみません。
hightide さんからのコメント
( Monday, April 02, 2001 01:46:27 )
コメントありがとうございます。 >「各々の cgi-bin/ 以下にあるファイルのみCGIとして実行する」 >じゃなかったかと思います。 >エラーを見る限り、これに引っ掛かっているような気がします。 それについても気になっていたのでテストはしています。 具体的には /Users/hightide/Sites/cgi-bin/ ディレクトリを作成して env.cgi を実行。これも403 Forbiddenなので.htaccessをcgi-binに入れてみましたが 403 Forbiddenでした。error_logも同じです。
hightide さんからのコメント
( Monday, April 02, 2001 01:48:25 )
書き忘れですm(_ _)m。 新たに作成したディレクトリとファイルのパーミッションは Terminalで設定してあります。
今井真人 さんからのコメント
( Monday, April 02, 2001 09:44:53 )
通常ウェブ公開するディレクトリはpublic_htmlがデフォルトです。 Sitesとなっていますが?OS Xのデフォルトがこうなのですか?
みうら さんからのコメント
( Monday, April 02, 2001 11:54:24 )
MacOSX版のApacheはかなりユニークな設定になっているので、FreeBSDや Linuxのマニュアル本を参考にするのはちょっときついかも知れません。 さらさらっとhttpd.confの中身を見てみましたが、ユーザーディレクトリの アクセス設定が、別ファイルで用意しています。 ユーザー名が「hogehoge」なら /private/etc/httpd/users/hogehoge.conf 各ユーザー設定はこのファイルを修正した方が安全です。 ファイルの中身は <Directory "/Users/hogehoge/Sites/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> となっているのですが、このまま Oprions を変更しても、CGIやSSIは 実行できませんでした。 理由は分かりませんが、Sites 内にサブディレクトリを作成し(例:bbs) <Directory "Users/hogehoge/Sites/bbs"> に変更することによりCGIの稼動は可能です。 また、設定ファイルを修正した場合は必ずApacheを再起動しなければなり ません。
hightide さんからのコメント
( Monday, April 02, 2001 13:08:52 )
今井真人さん、みうらさんコメント有り難うございます。 >通常ウェブ公開するディレクトリはpublic_htmlがデフォルトです。 >Sitesとなっていますが?OS Xのデフォルトがこうなのですか? はい。それがMac OS Xでは、みうらさんのコメントにある通り FreeBSDなどで親しんだディレクトリ構成とはちょっとかわって いてSitesがデフォルトになっているんです。 ちょっっとまだお昼もたべていないような状況ですので、あとで 時間がとれたらみうらさんの方法を実行して御報告します。あり がとうございました。
hightide さんからのコメント
( Monday, April 02, 2001 15:38:40 )
成果がありましたので御報告します。 みうらさんに教えていただいた各ユーザごとの.confファイルを まずテストもかねて <Directory "/Users/hightide/Sites/"> Options Indexes MultiViews ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> と書き換えてみました。それで /Users/hightide/Sites/env.cgiを実行したら CGIが実行されました。httpd.confをだいぶんいじっていますので その影響で私の場合はSitesディレクトリでも実行できてしまうか も知れません。 あと蛇足になりますがProject BuuilderでCで作成したCGIも動作 させられました。 皆様ありがとうございました。
yy さんからのコメント
( Thursday, October 04, 2001 21:55:52 )
cgi,ssiが実行できないと言う同じ症状にみまわれ、このBBSを参考に、色々試したところ、 <Directory "/Users/username/Sites/bbs/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> でbbsディレクトリだけcgi,ssiが実行可能になる上記の報告を参考に <Directory "/Users/username/Sites/*"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> *にしたところサブディレクトリでもcgi.ssiの実行が可能になりました。
大門 さんからのコメント
( Saturday, October 27, 2001 11:12:23 )
Mac OX XのApacheでCGIを動かそうとしています。この会議室の発言やOS X
関連の書籍を参考にして取りあえずSites以下のディレクトリでもCGIを動か
すことができるようになりました。ところがCGIを記述したページと他の
ファイルが関わるようなスクリプトではエラーが出てしまいます。たとえば
rand関数を用いた占いのCGIを画像なしで動かす場合には問題なく動きます。ところが該当するスクリプトの部分
$ransuu = int(rand(5));
-- 中略 --
if ($ransuu == 4) {
$unsei = "大吉";
-- 以下略 --
でgif画像を用いて
if ($ransuu == 4) {
$unsei = "daikichi.gif";
のようにすると
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
と言われてしまいます。他の部分はまったく同じように記述されているの
でgif画像を用いようとしたことが問題だとしか考えられません。
ちなみに問題のファイルは/Sites/uranai/uranai.cgiとして置いています。
またgif画像はuranai.cgiと同じuranaiフォルダに入れています。
画像のないアクセスカウンターのようなものでもうまく動かず、上記と同じ
ようなエラーが出てしまいます。
同じような問題に遭遇された方、また解決策、あるいはなぜこのような問題
が生じるのかという理由について御存じの方いらっしゃいましたら、お教え
ください。よろしくお願いいたします。
しあわせのツボ さんからのコメント
( Sunday, October 28, 2001 00:21:26 )
Terminalから perl -wc uranai.cgi として、どのようなエラーが出るかを確認して下さい。 推測ですが、 print "<img src="$unsei">"; のようなことをしていませんか? まさかとは思いますが、"\"ダブルクォート\"の エスケープ忘れ"なんてことはありませんよね。