Apache安装与配置
install
- 下载地址:https://www.apachelounge.com/download/,选择2.4.33版本64位
- 将程序解压到一个英文目录下,以管理身份打开cmd
- cd <解压目录>/bin,执行命令切换到apache解压的盘符的bin目录
- httpd.exe -k install -n "Apache",执行命令对bin目录下的httpd进行安装,-n参数是指定服务器的名称,默认名称是Apache24,很丑陋,所以改成了Apache
- httpd.exe -k uninstall -n "Apache",执行命令可对apache进行卸载
- 执行完安装命令之后,会有一个错误,大概意思是在conf目录下的http.cof 配置文件中指定的根目录serveroot并不是一个有效的目录
Errors reported here must be corrected before the service can be started.
httpd.exe: Syntax error on line 37 of C:/apache/conf/httpd.conf: ServerRoot must be a valid directory
- 我们找到这个配置文件,37行指定的根目录是ServerRoot "C:/Apache24",但是我们解压后因为改了名字,所以再配置文件我们也需要做出相应的更改,修改为ServerRoot "C:/apache"
- 再去执行cmd命令,httpd.exe -t,对httpd.exe是否正确安装进行测试,发现又报了错误,错误还是在上面的配置文件中,大概意思是在248行,DocumentRoot ‘C:/Apache24/htdocs‘ 不是一个目录或者不可读,其实还是和改了名字有关系,所以选中出现错误的地方,利用sublime中快捷键一直按ctrl+d直到文件最后,进行修改
AH00526: Syntax error on line 248 of C:/apache/conf/httpd.conf: DocumentRoot ‘C:/Apache24/htdocs‘ is not a directory, or is not readable
- 修改之后再次执行httpd.exe -t 测试命令,发现Syntax OK,但是其实还是有一个错误,大概意思缺少服务器的域名,提示我们通过ServeName这个指令进行全局设置。这里需要说明的是,这个报错我们其实可以忽略,因为我们之后需要做虚拟主机
AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using fe80::dd08:7c28:a78f:e5bd.
Set the ‘ServerName‘ directive globally to suppress this message
- 此时我们通过运行=>services.msc打开服务,看到apache服务已经被成功安装,但是并没有显示启动。
start
- httpd.exe -k start -n "Apache" 执行命令后,还是会报上面的AH00558错误,这里我们忽略,此时再去查看服务,Aapche服务已经正在运行了
- 此时我们再浏览器中输入127.0.0.1,就会弹出it works
DNS
- 这里我们再介绍下DNS的概念,客户在发送的请求的时候,首先会从本地的hosts文件下去找域名匹配的ip,否则则会去DNS服务器去解析,再获取ip后才会去web服务器上获取数据。我们可以通过修改本地C:\Windows\System32\drivers\etc下的hosts文件,依然能够访问
127.0.0.1 wuqiuxue.dec
端口
- 端口就好比是与外界交往的门,只有通过这个门,数据才会传递。在我们输入127.1.0.0的ip地址时,我们并没有输入端口号,因为url会默认添加一个80端口。同时apache的conf目录下的httpd.conf配置文件中的58行,用了Listen 80 进行了配置。所以客户输入ip地址,自然是去找这个ip地址下的拥有80端口的apache服务器。我们可以通过cmd执行netstat -ano命令查看端口占用情况,确实看到本地有一个服务将80端口占用,这里有这个服务的pid号——5424,通过执行tasklist|findstr "5424"命令,我们就可以查到是哪个服务占用了此端口,很显然是apache.
网站根目录
- 服务器将网站的根目录默认指向的是DocumentRoot "c:/apache/htdocs",htdocs下有一个index.html文件,很麻烦,我们可以自定义网站根目录。但是这里需要再次澄清一个概念,客户通过apache服务器80端口访问服务器磁盘上的数据,但是并不是代表可以访问所有服务器上所有的文件,这里apache有权限的设置,/ 斜杠代表的是服务器上所有的文件,大概意思是所有重写被拒绝,所有需求被拒绝
- 因为是拒绝访问,所以我们在将网站根目录地址更改的时候,还要对这个改过的目录进行设定,系统默认设定是是Require all granted,所以我们也就不用改了
默认文档
- 当客户端访问的是一个目录而不是具体文件,服务器默认就会返回这个目录下的某个文档(可以设置),这个被称之为默认文档。默认文档可以配置多个,用空格隔开,从前往后寻找,直到找到可用的为止,如果没有找到则启用一个目录浏览器
目录浏览
- 启用目录浏览是很丑陋的,所以我们要进行设置,还是在网站根目录中进行配置,将index删除即可
虚拟主机
- 一台机器上如果部署多个站点,那么我们需要通过配置虚拟主机的方式解决。
- httpd.conf在主配置文件中,虚拟主机的引入被注释了,解除注释。然后找到所在目录,找到虚拟配置文件进行更改,这样的方式是为了减少对主配置文件的修改,做到功能化单一化,当然即使我们改错了也没事,我们可以通过conf目录下的original目录进行恢复操作,这里存放这系统的默认配置