macOS Sierra Apache Web Server

先日は macOS Sierra へのバージョンアップで一日潰れた。その後,Web アプリのデバッグのために,macOS 上の開発コンテンツにアクセスしたところ,Web サーバが動いていない。そうだ,そうだ,macOS では Apache を動かすのに,システム環境設定で「Web 共有」をオンにするんだったと思い出して,システム環境設定メニューをみると「Web 共有」がない。え? Apache Web サーバを自分でインストールしなくちゃいけなくなったのか?

そうではなかった。which apachectl とやるとパスが表示されるので,Apache は標準で macOS に入っていることがわかる。そこで sudo apachectl start とやってみると,Apache が立ち上がった…ようにみえた。ところがブラウザからアクセスしてもやっぱりだめ。シスログ /private/var/log/system.log を確認すると,

Sep  7 00:16:42 margarita com.apple.xpc.launchd[1] (org.apache.httpd[1135]): Service 
exited with abnormal code: 1

のような感じで,Apache が異常終了している。よくわからん。

sudo apachectl と引数なしで起動すると以下のようなメッセージが出た。

$ sudo apachectl
httpd: Syntax error on line 135 of /private/etc/apache2/httpd.conf: Cannot load 
libexec/apache2/mod_proxy_ajp.so into server: dlopen(/usr/libexec/apache2/mod_
proxy_ajp.so, 10): Symbol not found: _proxy_module\n  Referenced from: /usr/
libexec/apache2/mod_proxy_ajp.so\n  Expected in: flat namespace\n in /usr/
libexec/apache2/mod_proxy_ajp.so

旧 macOS Mavericks 環境の追加コンフィグレーションが残っていて,Apache はそれを読み込んで mod_proxy_ajp.so をロードしようとしたが,リンクできないということだ。なんだ,つまらない原因。Apache の構成定義本体 httpd.conf は新 macOS Sierra のもので上書きされてしまい,デフォルト設定に戻っていて, mod_proxy_ajp.so のロード設定がコメントアウト状態であった。よって,mod_proxy_ajp.so に必要なモジュールについて,LoadModule ディレクティブを有効にしたら(要するに,行頭の # を削除したら)Apache は動きはじめた。

こうして問題は一応解決した。ネットで調べたところ,macOS ではいつからか「Web 共有」をシステム環境設定メニューから隠蔽する仕様に変わったらしい。ま,普通のユーザがローカルに Web サーバを起動して使う必要はほぼないので,余計な設定を見せないようにしたということか。セキュリティ上の理由が第一だろう。こっそり見ていた恥ずかしい画像やら動画やらが知らないうちに Web サーバ経由でネット公開されてしまっているのに気づいて青くなったやつが大勢いたのかも。

それにしても,見せていたものを見せなくするのは勇気のいることで,Apple はこのあたりバッサバッサって感じで恐れ入る。サポートだって,OS がちょっと旧くなるとすぐ止めてしまう。

白露初侯の満月の夜,かくしてまたもや計算機に煩わせられた。