MacOSX CatalinaでApche環境設定


以前(6年ほど前に購入)MacBookでWebサーバのテスト環境を作りました。
昨今の事情で、別のMacBookで同様の環境を作ろうとして、あれ?と思ったことから、今回はここに記録を残します。

環境

MacOSX Catalina 10.15.3
Apache 2.4.41
ruby 2.6.3

やりたいこと

ユーザディレクトリをドキュメントルートとして公開し、cgiを動かす

設定内容

現状

古いMacBookには「サイト」(ターミナル上のlsでは「Sites」)というフォルダがありましたが、新しいMacBookにはこのフォルダがありませんでした。
~ $ sudo apachectl start
を実行して、ブラウザで「 http://localhost/ 」 にアクセスすると「It works!」が表示される。
OS XにあったWebサーバ機能「Web共有」はMountain Lion(10.8)以降なくなり、ホームフォルダ直下「Sites」フォルダはなくなった(らしい....)

ドキュメントルートの作成と設定

# cd /Users/hoge/     
# mkdir Sites2            #「Sites」フォルダを作成
# touch Sites/.localized  # 「.localized」ファイルを作成すると以前のように『サイト』と表示

Finderで確認

/private/etc/apache2/httpd.confを編集する(数値は行番号)

183 #LoadModule userdir_module libexec/apache2/mod_userdir.so
520 #Include /private/etc/apache2/extra/httpd-userdir.conf
   ↓
183 LoadModule userdir_module libexec/apache2/mod_userdir.so
520 Include /private/etc/apache2/extra/httpd-userdir.conf

/private/etc/apache2/extra/httpd-userdir.confを編集する(数値は行番号)

16 #Include /private/etc/apache2/users/*.conf
   ↓
16 Include /private/etc/apache2/users/*.conf

Apacheを再起動しローカルフォルダのSitesにindex.htmlを作成

~ $ sudo apachectl restart
~ $ sudo vi /Users/entero/Sites/index.html
~ $ cat /Users/entero/Sites/index.html 
Here is User dir.

ブラウザで参照する

元々のドキュメントルート

ユーザのドキュメントルート

なにも自分では指定しなかったのに、/Users/hoge/Sitesがドキュメントルートになっていました。
理由はここに既定値で“Sites”と指定されていました。 /etc/apache2/extra/httpd-userdir.conf
10 UserDir Sites

ユーザディレクトリに作成したドキュメントルートのアクセスを制御するためのディレクティブは
/private/etc/apache2/users/hoge.conf に記述します。例として以下を設定してみました。

<Directory "/Users/entero/Sites/">
        Options Indexes        # ファイル一覧の表示を許可     
        Require all granted    # すべて許可
</Directory>

ファイルindex.htmlをindex2.htmlにrenameして設定が有効になっていることを確認しました。

cgiを動作させる

変更箇所は2つ

・ /private/etc/apache2/users/hoge.conf にユーザディレクトリのSites/cgiでcgiを動かすことを指定

<Directory "/Users/hoge/Sites/cgi">
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory> 

・ /private/etc/apache2/httpd.conf の173行目のコメントアウトを解除

    169 <IfModule !mpm_prefork_module>
    170         #LoadModule cgid_module libexec/apache2/mod_cgid.so
    171 </IfModule>
    172 <IfModule mpm_prefork_module>
    173         LoadModule cgi_module libexec/apache2/mod_cgi.so
    174 </IfModule>
動作確認

cgiディレクトリに下記のファイルtest.cgiを作成する

$ cat /Users/hoge/Sites/cgi/test.cgi 
#!/usr/bin/env ruby
print "Content-Type: text/html; charset=UTF-8\n"
print "\n"
print "<html>"
print "これは<b>CGI</b>のテストです。"
print "</html>"

ブラウザで http://localhost/~hoge/cgi/test.cgi にアクセスすると「これはCGIのテストです。」と表示されてOK。

htmlのソースが表示される時は、上記の変更箇所
文字化けしてしまう時は、「charset=」を確認してください