このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Mac OS XのApache

発言者:hightide
( Date Friday, March 30, 2001 17:14:01 )


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">";
のようなことをしていませんか?
まさかとは思いますが、"\"ダブルクォート\"の
エスケープ忘れ"なんてことはありませんよね。