1. 下载Apache for windows压缩包
2. 解压安装
加压到设定的目录,确保所在路径无中文和空格
- 以管理员身份运行命令提示符
- 切换到解压的路径
- 安装apache服务,在对应路径输入如下命令:
httpd -k install -n "Apache"
- 执行完会看到一个提示:
Errors reported here must be corrected before the service canbe started.
httpd: Syntax error on line 39 of 你的安装路径/conf/httpd.conf: ServerRoot mustbe a valid directory
- 修改配置文件:
找到安装路径下的conf目录下的httpd.conf文件用文本编辑器打开,找到上面报错指定的“line 39”行,我的是如下所示,为了方便我把行号也写上了:
37 Define SEVROOT "c:/Apache24"
38
39 ServerRoot "${SEVROOT}"
我们只需要将报错的那一行的ServerRoot中 的值,这里对应的是第37行SEVROOT “c:/Apache24”
只要把SEVROOT对应的值改为你的解压路径就行了,比如说你的在D盘MyApache路径下的Apache24就把第37行双引号里的值改为"D:/MyApache/Apache24" 注意:双引号内的是斜线 ‘/’ 不是复制路径的反斜线’\'
- 测试服务是否生效:
httpd -t
此时会发现最后一行提示 Syntax OK,
但是紧挨着上面一行还有一句提示:
Set the 'ServerName' directive globally to suppress this message
意思是让你去设置ServerName 即服务器地址名称
7. 设置主机地址名称:
通过查找上述的conf文件,发现ServerName在上述的conf文件中的227行,我们只要把#去掉(即取消注释),然后改为 :
ServerName localhost
再次执行上述第6步骤,会发现此时没有别的提示信息了只有一句“Syntax OK”.
恭喜成功安装Apache服务
3. 网站根目录
网站的根目录就是存放我们网站文件的最顶层目录,通常URL中的域名后面的第一个斜线对应的就是网站的根目录。
在httpd.conf文件中只需要改变DocumentRoot “这里的路径就是网站的根目录” ,同时需要将其后面的Directory 标签中的路径也要给为上面同样的路径才行,否则会报“Forbidden”错误。
4. 默认文档
当客户端访问的路径是一个目录而不是具体文件的时候,服务器默认返回这个目录下的某一个文件,这个文件就称之为默认文档。
同样在httpd.conf文件中找到DirectoryIndex,就在上述的Directory标签后面,我们只需要改变DirectoryIndex 后面的文件,就可以把它设置为默认文档了。
5. 目录浏览
默认情况下,当默认文档不存在时,浏览器会将对应路径下的文件夹展示出来,这样把目录结构暴露出来对于网站来说是不安全的,因此要设置一下取消展示目录结构,只需要将上述的Directory标签中的 Options Indexes FollowSymLinks 只要把这里的删除线的单词Indexes给删掉就好了,修改后的页面就会显示“Forbidden”了
6. 虚拟主机
如果说你只要在一个Apache服务器上配置一个站点服务,那么就可以跳过该环节往下看了,如果想要在一个Apache上配置多个站点的话,这是就需要配置虚拟主机了。也就是说虚拟主机可实现单个服务器实现多站点的服务。
一个Apache可以配置多个虚拟主机,一台虚拟主机就可以提供一个网站服务,因此暂时可以将虚拟主机理解为一个网站服务的站点,就像上述Apache服务器一样,它也有网站根目录、默认文档等。需要注意的是,一旦配置了虚拟主机原有的httd.conf文件里配置的网站根目录就会失效。
我们可以看到httpd.conf文件中有一行
# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
这一行说明了虚拟主机的配置文件,只需要将上述第二行注释取消,然后去对应的路径下找到httpd-vhosts.conf文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "${SRVROOT}/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error.log"
CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "${SRVROOT}/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
对上面的代码进行解释
- *:80 - - 意思是监听绑定在当前电脑上的任意IP的80端口,我们可以看到两个虚拟主机都是同一个端口,因为多台虚拟主机一同工作,设置的监听端口可能是相同的,所以每个虚拟主机必须配置 ServerName,因此我们可以看到上述代码每台虚拟主机都有自己唯一的ServerName(即访问的域名)
- ServerAdmin - - 网站管理员的邮箱地址;
- DocumentRoot - - 就是之前咱们说的网站根目录记住,目录里的分割符号是除号的斜线哦;
- ServerName - - 网站域名
- ErrorLog - - 错误日志
- CustomLog - - 普通日志
除了上述代码还要增加文件路径的授权权限,否则会报forbidden错误,一次要好增加如下代码:
DocumentRoot "网站根路径"// 这一行下面增加如下的代码
<Directory "网站根路径">
Options FollowSymLinks //不让目录可以浏览
AllowOverride None
Require all granted //这一行是核心 ,授权 允许访问
</Directory>
配置完之后只需要重新启动Apache服务就好了。
配置处理模块
因为Apache只会将指定的文件按照指定的规则进行处理,假如说只配置了如上的东西,还不够,以PHP文件为例,此时如果直接访问php,你会发现,php页面在浏览器上是展示了PHP代码的原样输出,因此还需要设置与PHP的关联,需要将Apache的Loadmodule 改为如下(我的PHP压缩包版本是7.4.5为例):
LoadModule myphp_module php解压路径/php7apache2_4.dll
myphp_module 是你给该模块自定义的名称。
然后再httpd.conf中的IfModule标签中添加如下代码:
AddType application/x-httpd-php .php
apache 根据LoadModule 处理模块判断按照什么规则执行,同时根据 MIME Type 是不是application/x-httpd-php来执行PHP文件。是否支持文件类型,可以去Apache的conf/mime.types 文件中查看。
Apache根据LoadModule确认支持的语言进行相应的解析,如果查找不到的话会直接将文件输出展示。