Parallels Desktop 20%OFFセール中Check!

HomebrewでMacにApacheをインストールする手順と設定

Apacheのインストール手順

macOSには標準でApacheがインストールされています。なので、わざわざインストールしなくてもいいのですが、開発環境で使うモノはHomebrewで一元管理したいし、最新のバージョンを使うこともできるしと良いこともあるのでやりましょう。

ていうか、もう何かをインストールすることがクセになっている私がここに居ます。

環境
  • Mac mini (M1, 2020)
  • macOS Monterey
  • Homebrew 3.4.1

Homebrewを使います。まだ導入していない場合はこちらもどうぞ。

目次

標準インストールのApacheを止める

標準でインストールされているApacheがすでに起動している場合は、これを止めます。ターミナルで次のコマンドを実行します。

sudo apachectl stop

また、自動起動するように設定されている場合は、これを解除します。

sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist

Apacheのインストール

ApacheのFormulaを検索してみます。

% brew search httpd
==> Formulae
darkhttpd       httpd         httpdiff        libmicrohttpd   lighttpd        mighttpd2       httpx           httpie          httpry

httpdがありました。他にapache2という名前のFormulaもあるようです。どちらでも同じなので、お好きな方をどうぞ。

% brew install httpd

(中略)

==> Pouring httpd--2.4.52.arm64_monterey.bottle.tar.gz
==> Caveats
DocumentRoot is /opt/homebrew/var/www.

The default ports have been set in /opt/homebrew/etc/httpd/httpd.conf to 8080 and in
/opt/homebrew/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo.

To restart httpd after an upgrade:
  brew services restart httpd
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
==> Summary
🍺  /opt/homebrew/Cellar/httpd/2.4.52: 1,662 files, 31.8MB
==> Running `brew cleanup httpd`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

インストールはつつがなく終了しました。

Apacheの設定

このままではhttpdが起動しないので、まずは最低限の設定をしましょう。ポート番号サーバ名を設定します。設定ファイルの場所は /opt/homebrew/etc/httpd/httpd.conf です。

% vi /opt/homebrew/etc/httpd/httpd.conf

変更前

Listen 8080
#ServerName www.example.com:8080

変更後

Listen 80
ServerName localhost:80

Apacheの起動と停止

起動・停止のコマンド

brew services start httpdhttpd を起動して、自動起動を有効にする
brew services stop httpdhttpd を停止して、自動起動を無効にする
brew services restart httpdhttpd を再起動する
Homebrewのコマンド
apachectl starthttpd を起動する
apachectl stophttpd を停止する
apachectl restarthttpd を再起動する
apachectl gracefulhttpd を再起動する(子プロセスは実行中のリクエストを完了してから終了)
Apacheのコマンド

ネットにはいろいろな解説が溢れていますが、試行錯誤した結果、ここに書かれている方法がベストだと思います。sudo はしないでください。Kegの中やログファイルなどの所有者が root になってしまい、のちのち面倒です。すべて一般ユーザ権限で実行します。

動作確認

起動コマンドを実行してみましょう。

% brew services start httpd
Password:
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
% ps ax | grep httpd
64821   ??  S      0:00.08 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
64824   ??  S      0:00.00 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
64825   ??  S      0:00.00 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
64826   ??  S      0:00.00 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
64827   ??  S      0:00.00 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
64828   ??  S      0:00.00 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
65101 s000  S+     0:00.00 grep httpd

いえい。

自動起動も有効になっています。

% launchctl list|grep httpd
-	0	homebrew.mxcl.httpd

さらにブラウザで http://localhost/ にアクセスしてみましょう。「It works!」と表示されれば成功です。

過去にroot権限でhttpdを動かしていたことがある場合、ユーザ権限で起動できないかもしれません。その場合は、実行ファイルやログファイルの所有者がrootになっていないか確認してください。

PHPを有効化する設定

設定ファイルの変更

PHPモジュールを読み込みます。PHPモジュールはPHPをインストールしたときに作成されています。

設定ファイルを開いて # Dynamic Shared Object (DSO) Support と書かれているところを探します。その下に各種モジュールを追加する設定がずらっと並んでいますので、一番下にPHPモージュールの記述を追加します。

% vi /opt/homebrew/etc/httpd/httpd.conf
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
#LoadModule mpm_event_module lib/httpd/modules/mod_mpm_event.so

(中略)

LoadModule alias_module lib/httpd/modules/mod_alias.so
#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so

次に、拡張子が .php のファイルをPHPスクリプトとして認識させるための設定をします。

% vi /opt/homebrew/etc/httpd/httpd.conf

設定ファイルの一番下に次の記述を追加します。

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

設定を反映させるためにhttpdを再起動します。

% brew services restart httpd

動作確認

動作確認用のPHPスクリプトファイル phpinfo.php をDocumentRoot /opt/homebrew/var/www に設置します。

% vi /opt/homebrew/var/www/phpinfo.php
<?php
phpinfo();

ブラウザで http://localhost/phpinfo.php にアクセスして、PHPの設定情報が表示されたら成功です。

phpinfoの表示

SSLを有効化する設定

mkcertのインストールと証明書の発行

開発環境に簡単にSSL証明書を発行できるツール mkcert をインストールします。

% brew install mkcert

次に認証局(CA)を作成します。パスワードの入力を求められるのでMacの管理者パスワードを入力します。

% mkcert -install
Created a new local CA 💥
Sudo password:

この操作で認証局(CA)が作成され、信頼できる認証局としてOSに登録されます。

コマンド mkcert -CAROOT でルート証明書の場所を確認することができます。/Users/<ユーザ名>/Library/Application Support/mkcert になっているはずです。

次に、SSL証明書を発行します。

証明書を設置するディレクトリを好きな場所に作成し、そのディレクトリに移動します。私は /opt/homebrew/etc/httpd/ssl にしました。

コマンド mkcert <ドメイン名> で、カレントディレクトリにSSL証明書が作成されます。

% mkdir /opt/homebrew/etc/httpd/ssl
% cd /opt/homebrew/etc/httpd/ssl
% mkcert localhost
Note: the local CA is not installed in the Firefox trust store.
Run "mkcert -install" for certificates to be trusted automatically ⚠️

Created a new certificate valid for the following names 📜
 - "localhost"

The certificate is at "./localhost.pem" and the key at "./localhost-key.pem" ✅

It will expire on 18 June 2024 🗓
% ls
localhost-key.pem localhost.pem
localhost-key.pem秘密鍵(KEY)
localhost.pem証明書 (CRT)

Apache設定ファイルの変更

次のように httpd.conf を変更します。SSL有効化に必要な2つのモジュールをロードして、SSLの設定ファイルをインクルードします。

% vi /opt/homebrew/etc/httpd/httpd.conf

変更前

#LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
#LoadModule ssl_module lib/httpd/modules/mod_ssl.so

# Secure (SSL/TLS) connections
#Include /opt/homebrew/etc/httpd/extra/httpd-ssl.conf

変更後

LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so

# Secure (SSL/TLS) connections
Include /opt/homebrew/etc/httpd/extra/httpd-ssl.conf

SSLの設定ファイル httpd-ssl.conf を修正します。ポート番号証明書ファイルの変更をします。

% vi /opt/homebrew/etc/httpd/extra/httpd-ssl.conf

変更前

Listen 8443

<VirtualHost _default_:8443>
ServerName www.example.com:8443
SSLCertificateFile "/opt/homebrew/etc/httpd/server.crt"
SSLCertificateKeyFile "/opt/homebrew/etc/httpd/server.key"

変更後

Listen 443

<VirtualHost _default_:443>
ServerName localhost:443
SSLCertificateFile "/opt/homebrew/etc/httpd/ssl/localhost.pem"
SSLCertificateKeyFile "/opt/homebrew/etc/httpd/ssl/localhost-key.pem"

いろいろいじったので、設定ファイルのチェックをしましょう。

% httpd -t
Syntax OK

設定ファイルの構文チェックコマンドは他に apachectl configtest がありますが、 httpd -t のほうが短くて好きです。

大丈夫だったので、再起動して設定を反映します。

% brew services restart httpd

ブラウザで https://localhost/ にアクセスして問題なければ問題ないです(日本語が下手)。

その他の設定

.htaccess を有効にするには httpd.confAllowOverride ディレクティブを修正します。

<Directory "/opt/homebrew/var/www">
    (中略)
    AllowOverride All
    (中略)
</Directory>

mod_rewrite を使えるようにするには、httpd.conf で次のように LoadModule ディレクティブをコメントアウトします。

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

DirectoryIndex の設定を変更します。ディレクトリへのアクセスがあったときにどのファイルを返すかの設定です。初期値は index.html だけです。index.phpindex.cgi を追加しました。

<IfModule dir_module>
    DirectoryIndex index.html index.php index.cgi
</IfModule>

以上です。

でわでわ

Apacheのインストール手順

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次