在自己的地盘上做个记录,不然每次遇到问题又要花时间去百度……
首先,mac 上需要有 Homebrew 工具(官方网址https://brew.sh),如果还没有安装的话可以上官网,复制命令在终端里运行即可。

这里Homebrew的官方源可能会比较慢,建议切换成国内镜像
中科大镜像源
https://mirrors.ustc.edu.cn/brew.git
https://mirrors.ustc.edu.cn/homebrew-core.git
https://mirrors.ustc.edu.cn/homebrew-cask.git
清华大学镜像源
https://mirrors.ustc.edu.cn/brew.git
https://mirrors.ustc.edu.cn/homebrew-core.git
https://mirrors.ustc.edu.cn/homebrew-cask.git
具体使用哪个镜像地址,我们可以使用 ping 命令测一下响应时间来决定,替换镜像源可以用如下命令
cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc.edu.cn/brew.git echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile source ~/.bash_profile cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
Homebrew 基本指令
// 查看配置 $brew config // 安装: $brew install 软件名 eg: brew install wget // 卸载: $brew uninstall 软件名 eg: brew uninstall wget // 查询: $brew search 软件名 // 更新 Homebrew,注意官方仓库可能会比较耗时 $brew update
安装软件
首先,安装 Nginx。在终端直接输入如下命令,等待命令执行结束就可以了(一般不太会出问题)
// 安装Nginx $brew install nginx
安装命令执行结束后,通过查看版本信息查看是否安装成功。
// 安装成功后,可查看当前的安装版本 $nginx -v nginx version: nginx/1.21.6
安装成功之后,我们打开浏览器,在地址栏输入 http://localhost,浏览器应该显示类似如下内容的页面

如果未正常显示,检查Nginx是否正常启动
// 启动 nginx 服务 $brew services start nginx // 停止nginx服务 $brew services stop nginx // 重启nginx服务 $brew services restart nginx
接下来,安装PHP。如果我们需要安装不同版本的PHP,使用如下命令搜索需要安装的版本,再进行安装
$brew search php

上图是搜索出来的php相关软件包,我们如果要安装7.2版本,则可以使用命令
$brew install php@7.2
或者我们希望直接安装最新版本
// 安装PHP,直接使用下方命令会自动安装最新版本 $brew install php
和安装Nginx一样,等待命令执行结束,我们通过查看版本信息,验证是否按照成功
$php -v PHP 8.1.5 (cli) (built: Apr 16 2022 00:14:18) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.5, Copyright (c) Zend Technologies with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies
接下来,我们要为Nginx配置PHP服务。
PHP 的配置文件一般在PHP的安装目录中,我们这里使用Homebrew安装,配置文件在 /usr/local/etc/php 目录中
第一步,先配置PHP,有几个配置文件 php.ini、php-fpm.conf、www.conf 三个文件需要配置
php.ini 中,建议修改时区,其他视情况修改
# 设置时区 date.timezone = PRC
在配置 php-fpm.conf 和 www.conf 之前,我们先要知道Nginx与PHP的两种通信方式:unix socket和tcp socket。
两者相比较 unix socket 在大多数时候效率会更高一些,因为在同一台服务器中,减少了不必要的tcp开销。但是,unix socket 在高并发场景下并不稳定,当连接数暴增时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错并且不返回异常。
php-fpm.conf 中建议修改:
1、修改daemonize=yes 或者 直接注释这一行,在行首添加英文符号(;)
2、如果是使用unix socket通信的,需要修改去掉 pid = run/php-fpm.pid 这一行的注释(这里路径是相对 /usr/local/var 的路径,也可设置绝对路径)
[global] ; Pid file ; Note: the default prefix is /usr/local/var ; Default Value: none ;pid = run/php-fpm.pid ; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging. ; Default Value: yes daemonize = yes
如果我们选择 unix socket 通信,www.conf 文件需要修改,否则该文件可以不做修改
; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on ; a specific port; ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ;listen = /usr/local/var/run/php-fpm.pid
上面几个主要的PHP配置修改完成之后,我们修改Nginx配置。Nginx的配置文件一般在 /etc/nginx 目录中,我们这是在 /usr/local/etc/nginx 目录中
其中 nginx.conf 是全局配置,如果我们要配置多个站点 可以在 servers 目录里进行单独配置(当然,也可以把全部配置写到 nginx.conf 文件中,只是那样管理起来会比较麻烦)
在 server { } 节点中新增如下内容,为PHP文件添加解析
location ~ \.php$ { # 第一种 tcp socket fastcgi_pass 127.0.0.1:9000; # 第二种 unix socket #fastcgi_pass unix:/usr/local/var/run/php-fpm.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
完成以上配置之后,我们重启Nginx和PHP服务
$brew services restart nginx ==> Successfully restarted `nginx` (label: homebrew.mxcl.nginx) $brew services restart php ==> Successfully restarted `php` (label: homebrew.mxcl.php)
找到 Nginx 主目录,在里面添加一个php文件,例如:test.php
<?php phpinfo();
打开浏览器,输入http://localhost/test.php,如果一切配置正常,将打开如下页面

至此,Mac中的Nginx+PHP环境算是搭建完成了。
最后一步,Redis扩展的安装。
我们通过php官方的 pecl 安装 redis扩展
// 先查询是否有 redis 扩展 $pecl search redis // 安装 igbinary 依赖 $sudo pecl install igbinary // 安装redis扩展 $sudo pecl install redis
pecl 方式经常安装失败,可能需要多试几次……
Great article. I’m going through many of these issues as well..