MAC 默认是自带 Apache 服务器的,但是我们需要后天的去使用配置一下它。
基础命令
// 开启
sudo apachectl -k start
// 关闭
sudo apachectl -k stop
// 重启
sudo apachectl -k restart
// 开启
sudo apachectl start
// 关闭
sudo apachectl stop
// 重启
sudo apachectl restart
// mac hosts 文件目录
/private/etc/hosts
// 配置文件路径
/etc/apache2/httpd.conf
// 备份配置文件
sudo cp httpd.conf httpd.conf.backup
// 还原配置(其实就是用备份文件覆盖)
sudo cp httpd.conf.backup httpd.conf
// 虚拟机配置路径
/etc/apache2/extra/httpd-vhosts.conf
// php.ini 路径
/etc/php.ini
// 将 php.ini.default 拷贝为 php.ini
sudo cp php.ini.default php.ini
-
httpd.conf
:为 Apache 服务器的配置文件。 -
php.ini
:为 PHP 语言的配置文件。 -
上面启动参数里面有带
-k
跟没带-k
的启动两种方式,可以看看 Apache起步命令加-k参数和不加的区别,但是有一点需要注意,如果你是用-k
的启动那么你后面的停止重启都需要用带-k
命令,否则会不生效,停止或者重启不了,使用不带-k
的启动也是一样的道理。 -
我这边是新机器,之前也没有对 Apache 服务器做过处理的,所以我们先开机就来启动一下 Apache:
sudo apachectl -k start
运行之后结果:
dengzemiaodeMacBook-Pro:~ dengzemiao$ sudo apachectl -k start AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using dengzemiaodeMacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message dengzemiaodeMacBook-Pro:~ dengzemiao$
咋们先不管警告啥的,因为咋们是新机器肯定啥都没有的,启动之后浏览器打开IP地址:http://localhost 或 http://127.0.0.1,如果浏览器输出 It works!,那就是启动成功了。
看来还是启动成功的!既然启动成功了!那么我们可以继续下一步…
修改 Apache 的配置文件
-
修改前先备份配置文件
httpd.conf
(使用上面的终端命令),然后用sublime text
、vscode
、文本编辑
等编辑器打开/etc/apache2
下的httpd.conf
文件。 -
Windows
上面是需要配置Apache
路径的,Mac
上则不需要这个步骤。 -
插入
Indexes
字段,开发阶段使用,线上服务器则需要去掉
按Command+F
搜索关键字"FollowSymLinks"
,在Options
和FollowSymLinks
之间插入单词Indexes
。Indexs
配置的作用是如果不存在Index.html
文件的时候, 将该目录下的文件树列出来# DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/Library/WebServer/Documents" <Directory "/Library/WebServer/Documents"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks Multiviews MultiviewsMatch Any # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted </Directory>
没有加入
Indexes
的打开 http://127.0.0.1 效果:加入
Indexes
的打开 http://127.0.0.1 效果: -
修改默认服务器地址
搜索关键字
"ServerName"
,如果不修改,就是 http://127.0.0.1# ServerName gives the name and port that the server uses to identify itself. # This can often be determined automatically, but we recommend you specify # it explicitly to prevent problems during startup. # # If your host doesn't have a registered DNS name, enter its IP address here. # #ServerName www.example.com:80 -》 默认配置就是 127.0.0.1 # 现在我们需要自定义一个 ServerName ServerName 127.0.0.1
-
打开
php
搜索关键字
"php7_module"
(根据版本不同,数字也可能是php3456等),默认是被注释的,需要手动打开。#LoadModule php7_module libexec/apache2/libphp7.so -》默认是被注释的 LoadModule php7_module libexec/apache2/libphp7.so
-
设置本地资源文件的根目录
一般在用户根目录
/Users/电脑名字
下创建文件夹Sites
作为存放本地资源的根目录。(直接用/Users/xxxx
根目录的原因:为了避免在Desktop
、Documents
等目录下出现的子文件夹需要逐级授权问题)
然后在配置文件中搜索关键字 "DocumentRoot"
,将 DocumentRoot
与 Directory
后面的默认路径替换为上面的自定义路径。
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
# /Library/WebServer/Documents -》 默认根目录
# /Users/dengzemiao/Sites -》 自定义根目录
DocumentRoot "/Users/dengzemiao/Sites"
<Directory "/Users/dengzemiao/Sites">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
我在自定义目录里面创建一个自定义 index2.html
(里面其他文件是我从默认路径那边拷贝过来的,这些都是没用的文件只是测试用一下):
然后在启动 `Apache` 之后访问路径:http://127.0.0.1/index2.html
注意了:以后开发写的php文件就是在这个 Sites 文件夹中进行创建文件或者项目开发,因为只有这里面你的php文件才会被执行成功,在其他地方则会显示源码不会被执行成功。
-
保存配置文件
Command + S,保存需要输入密码。
-
备份
php.ini.default
文件,(MAC)PHP php.ini 配置文件cd /etc sudo cp php.ini.default php.ini
(这一步好像可以不用配置,我忘了之前的操作了) 并在
httpd.conf
中添加配置:// 只需要添加路径即可,不需要带文件名 PHPIniDir /private/etc
-
启动Apache服务
sudo apachectl -k start
启动完成后,用浏览器访问
127.0.0.1
,可以看到放置在本地资源根目录下的文件。IP(
127.0.0.1
)也可以换成你电脑的IP地址,这样在同一局域网的设备也可以访问服务器的内容。用完
Apache
要手动关闭,否则会一直占用内存。到这里为止
Apache
也就配置完成了!!!
下面是一些 Apache 细节检测设置功能介绍,可选择性了解。
检测配置文件是否有问题
如果配置文件不小心改错或者写错东西
<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
Listen 80
</IfDefine>
不小心改成
<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
Listenss1 80
</IfDefine>
可以通过命令行
sudo apachectl -t
来检测配置文件是否有问题,上面改错之后会输出
dengzemiaodeMacBook-Pro:etc dengzemiao$ sudo apachectl -t
AH00526: Syntax error on line 56 of /private/etc/apache2/httpd.conf:
Invalid command 'Listenss1', perhaps misspelled or defined by a module not included in the server configuration
dengzemiaodeMacBook-Pro:etc dengzemiao$
如果没有问题,则会输出:
dengzemiaodeMacBook-Pro:etc dengzemiao$ sudo apachectl -t
Syntax OK