🫕

Mac+Nginx+PHPでローカル環境を作ったメモ

2024/07/02に公開

nginxphp使うには、php-fpmというものを使うらしいですが、phpをインストールすると自動的にフォルダに入っていました。

環境

  • macOS:Sonoma 14.5
  • nginx:1.27.0
  • php:8.2.20

1. nginxのインストール

ターミナル
brew install nginx

2. phpのインストール

ターミナル
brew install php@8.2

2.1 phpのパスを通す

ターミナル
echo export PATH="/usr/local/Cellar/php@8.2/8.2.20/bin:$PATH" >> ~/.zshrc
echo export PATH="/usr/local/Cellar/php@8.2/8.2.20/sbin:$PATH" >> ~/.zshrc

2.2 設定を反映する

ターミナル
source ~/.zshrc

もし.zshrcがない場合は以下で.zshrcを作成して、2.1と2.2を実行する

ターミナル
touch .zshrc

3. nginxの設定と起動

3.1 rootディレクトリを作成し、index.phpを作成する

今回は/Users/shimotani/codes/html/testをルートディレクトリとする。
index.phpを以下の内容で作成する

index.php
<?php phpinfo(); ?>

3.2 hostsファイルを編集する

/private/etc/hostsを開いてドメイン名を追加する。

hosts
...
127.0.0.1   localhost
+127.0.0.1   test.dev
...

3.3 serversフォルダに設定ファイルを作成する

/usr/local/etc/nginx/serversの中に適当にファイル(ここではドメイン名のtest.devとする)を作成して、中身を以下のようにする

test.dev
server {
  listen 80;

  root /Users/shimotani/codes/html/test; # ルートディレクトリを設定する
  index index.php index.html index.htm # pathが/の時に、pathにファイル名を付与してリダイレクトする
  server_name test.dev; # ドメイン名

  # ここからphp-fpmの設定
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

3.4 nginxを起動する

ターミナル
nginx

すでに起動していた場合はリロードする

ターミナル
sudo nginx -s reload

4. php-fpmの設定と起動

4.1 php-fpmの設定

色々調べましたが結局特に変更する箇所はありませんでした。
一応、3.3で作成したtest.devfastcgi_passのアドレスと/usr/local/etc/php/8.2/php-fpm.d/www.confの中身のlistenのアドレスが一致していることを確認しました。

www.conf
...
; Note: This value is mandatory.
listen = 127.0.0.1:9000; 👈これ
...

4.2 php-fpmの起動

ターミナル
brew services start php@8.2

すでに起動してた場合はリロードする

ターミナル
brew services restart php@8.2

5. 127.0.0.1:80にアクセスする

127.0.0.1:80にアクセスしてphpの情報が表示されていればOKです。
sslの設定をしていないので、ドメイン名ではアクセスできないかもしれません。

少し詰まったとこ(Mac初心者には難しかった)

  • nginxがうまく起動できなかったことがあり、PCを再起動したら起動できるようになった。おそらく、直前にMAMPをインストールしていて、nginxがすでに起動していたことが原因?

  • finderでの隠しファイルの表示・非表示切り替えはcommand + shift + .(コマンド + シフト + ピリオド)

  • finderで特定のパスに移動する方法は、finderのメニューバーの移動→フォルダーへ移動からパスを入力

参考サイト

Discussion