Mac 启动 Apache 服务器
macOS 自带了 Apache 服务器和 PHP 环境,还包括大量动态拓展。只需要简单的配置,就可以让它们运行起来。
你可以通过 apachectl -version
查看 Apache 的版本;通过 php -v
可以查看 PHP 版本,php -m
可以查看所有拓展。
启动 Apache
在终端输入 sudo apachectl start
,即可启动 Apache 服务器。用浏览器打开 http://localhost
,若显示「It works!」,说明服务器启动成功。
关闭和重启服务器的命令分别是 sudo apachectl stop
和 sudo apachectl restart
。
如果需要开机启动服务器,可以编辑 /System/Library/LaunchDaemons/org.apache.httpd.plist
,将1
2<key>Disabled</key>
<true/>
改为1
2<key>Disabled</key>
<false/>
即可。
配置服务器
Apache 的配置文件为 /etc/apache2/httpd.conf
,为防止出现问题,建议将其备份后进行编辑。在更新了 Mac 系统后,可能还需要重新进行配置。
Apache 默认的根目录在 /Library/WebServer/Documents/
下,你可以通过编辑配置文件中的 DocumentRoot
属性来修改它。
默认的配置文件中,很多常用的模块都没有启用,例如 PHP。在 httpd.conf 中,找到1
LoadModule php7_module libexec/apache2/libphp7.so
将其行首用于注释的#
去掉即可。
如果你使用 Homebrew 或通过源码编译安装了其他的 PHP 环境,就需要把默认的 libphp7.so
的路径替换为你所安装的版本,例如 /usr/local/opt/php/lib/httpd/modules/libphp7.so
。具体的安装方法将在后文介绍。
除此之外,你可能还需要配置启用其它模块,例如 mod_rewrite.so
。像 WordPress 或者 Nextcloud 这种应用,都自带了.htaccess
文件,用于设置 rewrite 的规则。为了使其能够正确工作,就需要启用该模块。方法是:先找到包含 mod_rewrite.so
的对应行,删除其行首用于注释的#
,然后在 Directory
标签下,将 AllowOverride None
改为 AllowOverride All
即可。httpd.conf
还可以设置很多其它的内容,可以自行寻找教程,此处不再赘述。
还有一件事情是,要确保运行 Apache 的用户(默认为_www
)对其根目录有读写权限,可以通过右键点击 Documents
文件夹,选择「显示简介」来修改权限,或通过 chown
命令递归地修改之。
关于 PHP
系统自带的 PHP 版本较旧,可以自行安装新版本。如果使用 Homebrew 安装,执行 brew install php
即可安装最新版本;如果要安装特定版本,先执行 brew search php
查看可用的版本,然后再选择一个自己需要的版本安装,例如 brew install [email protected]
。
如果要通过源码编译 PHP,可以在此处下载源码。需要注意的是,编译 PHP 时要指定 make ZEND_EXTRA_LIBS='-liconv'
,否则可能会出现 undefined reference to 'libiconv'
的错误。
安装完成后,仍然可以通过 php -v
和 php -m
检查环境是否正确。
PHP 拓展
很多 PHP 应用都需要拓展模块的支持,例如搭建 Minecraft 服务器的 PocketMine-MP 需要 leveldb
支持,而生成图片验证码需要 gd2
支持,一些应用可能还需要 redis
等。PHP 支持动态拓展,编译安装后可以通过 php.ini
进行配置。以安装 phpredis
为例,具体步骤为:1
2
3
4
5cd /path/to/your/phpredis
phpize
./configure
make
make install
拓展编译完成后,在 php.ini
中加入 extension=redis.so
,重启服务后即可启用拓展模块。Mac 系统自带的 PHP 配置文件为 /private/etc/php.ini
(把该目录下的 php.ini.default
复制一份),用 Homebrew 安装的则是 /usr/local/etc/php/7.2/php.ini
。如果你的软件包安装较为混乱,找不到 php.ini
,那么可以通过 php -i | grep "php.ini"
获得它所在的目录。更多方法可以参考:PHP 查找 php.ini。
报错信息
如果使用 sudo apachectl start
命令启动 Apache 服务器,是不会显示错误信息的。因此,如果启动失败,还需要使用 sudo /usr/sbin/httpd -k start
查看报错信息。如果是 httpd.conf 配置出现问题,请对照报错的行数进行修改。如果是找不到目录等问题,检查相应的目录或权限即可。
本文更新于 2022 年 2 月 22 日:
macOS Monterey 版本移除了自带的 PHP,并且 Homebrew 安装的 PHP 因缺少签名无法配合系统自带的 Apache 服务器使用。