Apache HTTP Server 現状整理

1. 現在確認できている状態

結論:
現在、このMacでは Homebrew版 Apache が 8080番ポートで稼働しています。
項目 現在の状態
Apache Homebrew版
実行ファイル /opt/homebrew/opt/httpd/bin/httpd
ポート 8080
80番ポート LISTENプロセスなし
設定ファイル /opt/homebrew/etc/httpd/httpd.conf
DocumentRoot /opt/homebrew/var/www

2. Apacheプロセスの確認

Apacheを確認するときは、ユーザー名(root、_wwwなど)だけでは判断しません。 実際にどのApacheなのかは、実行ファイルのパスで判断します。

今回確認したプロセス:

ps -p 9591 -o pid,user,command

  PID USER  COMMAND
 9591 user1 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND

この結果から、PID 9591 は Homebrew版 Apacheであることが確認できます。

Apacheの判定方法

実行ファイル Apacheの種類
/usr/sbin/httpd macOS標準Apache
/opt/homebrew/opt/httpd/bin/httpd Homebrew Apache
注意:
rootだからmacOS標準、_wwwだからHomebrew、というように ユーザー名だけでApacheの種類を判断することはできません。

3. 80番ポートの確認

次のコマンドで80番ポートを確認しました。

sudo lsof -nP -iTCP:80 -sTCP:LISTEN

結果:

(何も表示されない)

つまり、現在80番ポートをLISTENしているプロセスはありません。

4. 8080番ポートの確認

次のコマンドで8080番ポートを確認しました。

sudo lsof -nP -iTCP:8080 -sTCP:LISTEN

結果:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF  NODE  NAME

httpd    9591  user1  4u   IPv6  ...     0t0       TCP   *:8080 (LISTEN)
httpd    9657  user1  4u   IPv6  ...     0t0       TCP   *:8080 (LISTEN)
httpd    9658  user1  4u   IPv6  ...     0t0       TCP   *:8080 (LISTEN)
httpd    9659  user1  4u   IPv6  ...     0t0       TCP   *:8080 (LISTEN)

複数の httpd プロセスが表示されていますが、 これは必ずしも複数のApacheが競合しているという意味ではありません。

Apacheは通常、親プロセスと複数の子プロセスで動作します。 そのため、同じApacheについて複数の httpd プロセスが表示されることがあります。

5. 現在のApache構成

Homebrew Apache
       │
       │ /opt/homebrew/opt/httpd/bin/httpd
       │
       ▼
    TCP :8080
       │
       ▼
http://localhost:8080/
       │
       ▼
/opt/homebrew/var/www/
       │
       ├── index.html
       │
       └── projects/
            ├── canape-cms/
            ├── stock-price/
            ├── api_sample/
            └── docker-app/

6. Apacheの設定ファイル

macOS標準Apache

/etc/apache2/httpd.conf

Homebrew Apache

/opt/homebrew/etc/httpd/httpd.conf

現在使用しているHomebrew Apacheについては、 /opt/homebrew/etc/httpd/httpd.conf が設定ファイルです。

7. Apacheの起動・停止

7.1 Homebrew Apache

現在使用しているのはこちらです。

brew services start httpd

停止:

brew services stop httpd

状態確認:

brew services list

7.2 macOS標準Apache

macOS標準Apacheを操作する場合は、次のコマンドを使用します。

sudo apachectl start
sudo apachectl stop
注意:
現在の開発環境ではHomebrew Apacheを使用しているため、 macOS標準Apacheを意図的に起動する必要はありません。

8. ポート競合について

2つのApacheが同時に動いている場合でも、 必ずポート競合が発生するわけではありません。

競合するのは、同じIPアドレス・同じTCPポートを 同時にLISTENしようとした場合です。

例えば:

Apache A → :80
Apache B → :8080

なら、ポートが異なるため通常は競合しません。

今回の確認結果では、

:80   → LISTENなし
:8080 → Homebrew Apache

なので、現在、Apache同士のポート競合は確認されていません。

9. 現在の結論

10. 今後の確認に使うコマンド

Apacheのプロセス確認

ps aux | grep httpd

80番ポート確認

sudo lsof -nP -iTCP:80 -sTCP:LISTEN

8080番ポート確認

sudo lsof -nP -iTCP:8080 -sTCP:LISTEN

Homebrew Apacheの状態確認

brew services list

Apacheの実行ファイル確認

ps -p 9591 -o pid,user,command