Apache 完全ガイド(macOS 標準 vs Homebrew)

このページは macOS 上で Apache を安全に使い分けるための実務的な完全ガイドです。標準版(/usr/sbin/httpd)と Homebrew 版(/opt/homebrew/.../httpd)の違い、起動/停止/競合回避、DocumentRoot、トラブルシューティング、よく使うコマンドまで網羅しています。

概要(短く)

標準 Apache
/usr/sbin/httpd - 設定: /etc/apache2/httpd.conf - デフォルト DocumentRoot: /Library/WebServer/Documents - ポート 80
Homebrew Apache
/opt/homebrew/opt/httpd/bin/httpd - 設定: /opt/homebrew/etc/httpd/httpd.conf - デフォルト DocumentRoot: /opt/homebrew/var/www - 通常ポート 8080
重要
両者は別物。**同時起動でポート競合**するため、どちらか一方だけを使う運用を推奨します。

よく使うコマンド(標準 Apache)

標準 Apache を操作する基本コマンド:

sudo apachectl start
sudo apachectl stop
sudo apachectl restart
sudo apachectl configtest        # 設定構文チェック
ps aux | grep httpd              # プロセス確認
sudo lsof -i :80                 # ポート 80 占有確認
sudo tail -f /var/log/apache2/error_log

Homebrew 版の確認/停止

brew services list
brew services stop httpd
sudo pkill -9 -f /opt/homebrew/opt/httpd/bin/httpd
ps aux | grep /opt/homebrew/opt/httpd

Tip: Homebrew 版を使わないなら brew uninstall httpd で削除しておくと競合が発生しません。

設定ファイルと主要パス

標準 Apache 実行ファイル
/usr/sbin/httpd
標準 httpd.conf
/etc/apache2/httpd.conf
標準 DocumentRoot
/Library/WebServer/Documents
標準 ログ
/var/log/apache2/error_log/var/log/apache2/access_log
Homebrew 実行ファイル
/opt/homebrew/opt/httpd/bin/httpd
Homebrew 設定
/opt/homebrew/etc/httpd/httpd.conf(extra/ 配下も)
Homebrew DocumentRoot
/opt/homebrew/var/www

DocumentRoot とファイル配置

DocumentRoot 配下のディレクトリは URL パスにそのまま対応します。

/Library/WebServer/Documents/
├─ Library.html       → http://localhost/Library.html
├─ app/index.html     → http://localhost/app/
└─ images/logo.png    → http://localhost/images/logo.png

権限のポイント:

運用方針:どちらを使うか決める(推奨)

目的別おすすめ:

プラン A:標準 Apache を使う(推奨・簡単)

# Homebrew版を止める
brew services stop httpd
sudo pkill -9 -f /opt/homebrew/opt/httpd/bin/httpd

# 設定確認・起動
sudo apachectl configtest
sudo apachectl start

プラン B:Homebrew Apache を使う(標準を停止)

# 標準apacheを停止して無効化
sudo apachectl stop
sudo launchctl bootout system /System/Library/LaunchDaemons/org.apache.httpd.plist

# Homebrew版を起動
brew services start httpd

トラブルシューティング(よくある問題と対処)

1) 起動時に出る警告: AH00558: Could not reliably determine the server's fully qualified domain name

→ 軽微な警告。/etc/apache2/httpd.confServerName localhost を追記して再起動すれば消えます。

2) 起動に失敗してログに AH00136: Server MUST relinquish startup privileges

mod_unixd が読み込まれていない か、別の httpd が介在していると発生します。

# 必要モジュールが有効か確認
# /etc/apache2/httpd.conf に次があるか:
LoadModule unixd_module libexec/apache2/mod_unixd.so

3) ポート 80 が使えない / 接続拒否

sudo lsof -i :80
# /opt/homebrew/.../httpd が出ていたら Homebrew版がポートを占有している

→ Homebrew 側を停止してから標準 Apache を起動してください。

4) ファイルが見えない(403 / 404)

5) apachectl status が lynx: command not found

→ 表示用の lynx が入っていないだけ。状態確認は ps aux | grep httpdlsof で代替できます。

VirtualHost と複数サイト運用の基本

DocumentRoot をそのまま変えずに複数サイトをホストするには VirtualHost を使います(例: 開発用と静的サイトを分ける)。

<VirtualHost *:80>
    ServerName local-app.test
    DocumentRoot "/Users/you/projects/app/public"
    <Directory "/Users/you/projects/app/public">
      Require all granted
      AllowOverride All
    </Directory>
</VirtualHost>

ローカルで名前解決するには /etc/hosts にエントリを追加:

127.0.0.1 local-app.test

Django / PHP を Apache 下で動かす(概略)

Django(mod_wsgi)概略

# 例(簡易)
WSGIDaemonProcess myapp python-path=/Users/you/projects/myapp:/Users/you/.venv/lib/pythonX.Y/site-packages
WSGIScriptAlias / /Users/you/projects/myapp/myapp/wsgi.py
<Directory /Users/you/projects/myapp>
  Require all granted
</Directory>

PHP

起動前チェックリスト(実行順)

  1. brew services stop httpd(Homebrew版を使わない場合)
  2. sudo pkill -9 -f /opt/homebrew/opt/httpd/bin/httpd(残プロセスを排除)
  3. sudo apachectl configtest(Syntax OK を確認)
  4. sudo apachectl start(起動)
  5. sudo lsof -i :80 または ps aux | grep httpd で確認
  6. ブラウザで http://localhost/ を開く

FAQ(よくある質問)

Q: 両方の Apache を同時に起動できますか?

A: ポートを分ければ技術的には可能(例: Homebrew を 8080、標準を 80)。しかし設定混乱の原因になるため非推奨。

Q: ServerName の警告は無視できますか?

A: 基本的に動作には影響しません。ログ上の警告を消すには ServerName localhost を設定して再起動してください。

Q: 標準 Apache を完全に削除したい

A: macOS に組み込まれているため完全削除は非推奨です。代わりに標準を無効化して Homebrew版に切り替えてください(手順は本ページ上部の「プラン B」参照)。