升级到 High Sierra 后,惊奇的发现macOS自带的PHP版本已经升级到了 7.1.7,瞬间惊喜,毕竟使用 vagrant 或者 docker 来构建web开发环境总是需要这样或那样的额外资源消耗,虽然他们都很棒,但既然系统自身已经很好的提供了基础组建,我们何乐而不为呢?
# 检查PHP版本
➜ php -v
PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
第一步:Apache2 的基本配置
macOS 同样自带了 apache2 组件,免的我们下载了
# 检查版本,发现是 2.4.27 已经很新很够用了
➜ apachectl -v
Server version: Apache/2.4.27 (Unix)
Server built: Jul 15 2017 15:41:46
接下来我们需要让 apache2 支持PHP7运行
vim /etc/apache2/httpd.conf
# 去掉以下注释
LoadModule php7_module libexec/apache2/libphp7.so
# 如果你需要修改站点根目录,请查找并替换以下内容,一共有两处,记得都要替换,其实我并不会修改它,因为反正我也不会用的,我在下文中会讲到
/Library/WebServer/Documents
# 接下来我们需要激活 rewrite 模块,去掉下面这一行的注释
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
到这里,我们的macOS 就已经可以运行PHP7应用了,现在我们需要检查配置并启动 apache
# 检查配置,这一点很关键,如果你的配置文件有语法错误或者其他问题,你可以通过这一步找到相关的错误信息
➜ apachectl configtest
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host.example.com] does not exist
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host2.example.com] does not exist
AH00557: httpd: apr_sockaddr_info_get() failed for bogon
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
你可能看到一些警告信息,但这并不影响你的 apache2 正常运行,因为最后的结论是 Syntax ok. 当然了,如果你有强迫症的话,处理一下造成警告的问题还是有必要的。我的警告信息大致意思是我所设置的一个vhost中包含了一个不存在的目录,这其实是 vhost 自带的一个Demo,我们在下文中会讲到 vhosts 的配置。
apachectl start/stop/restart # 启动、停止、重启,你们懂的
第二步:apache2 虚拟主机配置
我们在日常开发中,一定会同时处理多个WEB项目,否则你一定是一个假的WEB开发人员,所以让一个 apache2 去运行位于多个不同目录的WEB项目,是必须的。
macOS 在这一点上的实现还是比较简单的,我们来看看如何配置。
首先,我们需要让 apache2 支持 vhosts
# 编辑apache配置文件
vim /etc/apache2/httpd.conf
# 去掉以下行的注释
Include /private/etc/apache2/extra/httpd-vhosts.conf
然后,我们macOS 上的apache 就支持多个虚拟主机了,接下来我们看如何配置具体的虚拟主机,方式有很多种,我只写一种最简单的。
# 编辑虚拟主机配置文件
vim /etc/apache2/extra/httpd-vhosts.conf
# 添加你的虚拟主机
<VirtualHost *:80>
ServerName yourVhost.com
ServerAlias www.yourVhost.com
ServerAdmin webmaster@localhost
DocumentRoot ~/path/to/your/project/root/
RewriteEngine on
<Directory ~/path/to/your/project>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog "/private/var/log/apache2/apple.com-error_log"
CustomLog "/private/var/log/apache2/apple.com-access_log" common
#ErrorLog ${APACHE_LOG_DIR}/error.log
#CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
是的,我们为新建的本地虚拟主机配置了一个访问域名:http://yourVhost.com 还有一个访问别名: http://www.yourVhost.com, 然后我们将代码目录指定为 ~/path/to/your/project/root/,并限制了上级目录的访问权限。
接下来,我们需要编辑本地的 host 文件,实现项目的本地域名解析访问
vim /etc/hosts
# 添加一下内容
127.0.0.1 yourVhost.com www.yourVhost.com
重启 apache2
apachectl restart
在浏览器里输入 http://yourVhost.com 访问你的项目吧。
本文如有错误欢迎指正。