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 httpd | httpd を起動して、自動起動を有効にする |
brew services stop httpd | httpd を停止して、自動起動を無効にする |
brew services restart httpd | httpd を再起動する |
apachectl start | httpd を起動する |
apachectl stop | httpd を停止する |
apachectl restart | httpd を再起動する |
apachectl graceful | httpd を再起動する(子プロセスは実行中のリクエストを完了してから終了) |
動作確認
起動コマンドを実行してみましょう。
% 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!」と表示されれば成功です。
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の設定情報が表示されたら成功です。
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
大丈夫だったので、再起動して設定を反映します。
% brew services restart httpd
ブラウザで https://localhost/ にアクセスして問題なければ問題ないです(日本語が下手)。
その他の設定
.htaccess を有効にするには httpd.conf
の AllowOverride
ディレクティブを修正します。
<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.php
と index.cgi
を追加しました。
<IfModule dir_module>
DirectoryIndex index.html index.php index.cgi
</IfModule>
以上です。
でわでわ
コメント