0%

Mac启动Apache服务器

macOS自带了Apache服务器和PHP环境,还包括大量动态拓展。只需要简单的配置,就可以让它运行起来。
你可以通过apachectl -version查看Apache的版本;通过php -v可以查看PHP版本,php -m可以查看所有拓展。

启动Apache

在终端输入sudo apachectl start,即可启动Apache服务器。用浏览器打开http://localhost,若显示「It works!」,说明服务器启动成功。
关闭和重启服务器的命令分别是sudo apachectl stopsudo 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

将其行首用于注释的#去掉即可。
如果你使用brew或通过源码编译安装了其他的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版本较旧,可以自行安装新版本。如果使用brew安装,执行brew install php即可安装最新版本;如果要安装特定版本,先执行brew search php查看可用的版本,然后再选择一个自己需要的版本安装,例如brew install php@7.1
如果要通过源码编译PHP,可以在此处下载源码。需要注意的是,编译PHP时要指定make ZEND_EXTRA_LIBS='-liconv',否则可能会出现undefined reference to 'libiconv'的错误。
安装完成后,仍然可以通过php -vphp -m检查环境是否正确。

PHP拓展

很多PHP应用都需要拓展模块的支持,例如搭建Minecraft服务器的PocketMine-MP需要leveldb支持,而生成图片验证码需要gd2支持,一些应用可能还需要redis等。PHP支持动态拓展,编译安装后可以通过php.ini进行配置。以安装phpredis为例,具体步骤为:

1
2
3
4
5
cd /path/to/your/phpredis
phpize
./configure
make
make install

拓展编译完成后,在php.ini中加入extension=redis.so,重启服务后即可启用拓展模块。Mac系统自带的PHP配置文件为/private/etc/php.ini(把该目录下的php.ini.default复制一份),用brew安装的则是/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配置出现问题,请对照报错的行数进行修改。如果是找不到目录等问题,检查相应的目录或权限即可。

🍭支持一根棒棒糖!