安装Web服务器后,为了更好地使用服务器,还需要对其进行配置。本节将对Web服务器的配置进行讲解,并通过案例练习配置虚拟主机。
在实际开发中,可能会同时开发多个项目,这就需要管理多个项目目录。为了能够同时管理多个项目,需要配置虚拟主机。
虚拟主机能够实现在一台服务器中管理多个项目,每一个项目都有独立的域名和目录。在Apache服务器中配置多个虚拟主机,可以实现通过域名访问指定项目。下面讲解如何配置虚拟主机。
在项目的开发阶段,有时需要使用域名访问本机的Web服务器,通过更改hosts文件可以将任意域名解析到本地。
在Windows系统中以管理员身份打开命令提示符窗口,在命令提示符窗口中使用记事本打开hosts文件,具体命令如下。
notepad C:\Windows\System32\drivers\etc\hosts
在hosts文件中配置IP地址和域名的映射关系,具体内容如下。
127.0.0.1 www.php.test
在上述配置中,当访问www.php.test这个域名时,会自动解析到127.0.0.1,实现通过域名访问本机的Web服务器。需要注意的是,这种域名解析方式只对本机有效。
配置虚拟主机可以实现在一台服务器上部署多个网站,虽然服务器的IP地址相同,但是当用户使用不同域名访问时,访问到的是不同的网站。配置虚拟主机的步骤如下。
①启用虚拟主机配置文件,在httpd.conf中搜索“httpd-vhosts”,删除“#”,具体配置如下。
Include conf/extra/httpd-vhosts.conf
在上述配置中,Include表示从另一个文件中加载配置,conf/extra/httpd-vhosts.conf是虚拟主机文件路径。
②在httpd-vhosts.conf中配置虚拟主机,将文件中原有的配置删除或全部使用“#”注释起来,添加两个虚拟主机——localhost和www.php.test,这两个虚拟主机的站点目录不同,具体配置如下。
1 <VirtualHost *:80> 2 DocumentRoot "C:/web/apache2.4/htdocs" 3 ServerName localhost 4 </VirtualHost> 5 <VirtualHost *:80> 6 DocumentRoot "C:/web/apache2.4/htdocs/www.php.test" 7 ServerName www.php.test 8 </VirtualHost>
在上述配置中,添加了localhost和www.php.test虚拟主机,其中,“*:80”表示任意IP地址的80端口,DocumentRoot表示文档根目录,ServerName表示服务器名。
③修改Apache的配置文件后,重启Apache服务器,使配置文件生效。
④在Apache的htdocs目录中创建www.php.test目录,并在该目录中创建index.html文件,文件内容为“Welcome www.php.test”。
通过浏览器访问这两个虚拟主机,运行结果如图1-17所示。
图1-17 访问虚拟主机
设置目录访问权限可以限制指定用户访问服务器中的指定文件和目录,防止恶意访问影响服务器安全。
在Apache中,可以使用目录指令来设置目录访问权限。常用的目录指令如表1-2所示。
表1-2 Apache中常用的目录指令作用
表1-2中,在Indexes、FollowSymLinks前面添加“-”表示禁用相应功能,添加“+”或省略“+”表示启用相应功能。
在Apache中设置目录访问权限有两种方式,具体介绍如下。
httpd.conf中默认添加根目录和htdocs目录的配置,根目录的默认配置如下。
<Directory /> AllowOverride None Require all denied </Directory>
在上述配置中,<Directory>用于开始对目录进行配置,上述配置表示根目录禁止读取分布式配置文件,并且阻止所有访问。
httpd.conf配置文件中htdocs目录的默认配置如下。
<Directory "${SRVROOT}/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
<Directory>中的路径可以自定义,上述配置表示htdocs目录启用目录浏览功能,允许使用符号链接,允许所有访问。
值得一提的是,当启用目录浏览功能时,如果用户访问的目录中没有默认索引页(如index.html、index.php),就会显示文件列表。启用目录浏览功能可方便查看服务器上的文件,但是服务器上的重要文件也可以被随意访问,会降低服务器的安全性。
默认情况下,httpd.conf配置文件中对根目录和htdocs目录的配置不需要修改,读者了解即可。
分布式配置文件是指分布在每个目录下的配置文件,文件扩展名为.htaccess。Apache在读取分布式配置文件时,会从磁盘根目录一直查找到当前访问的目录,如果当前访问的目录下有.htaccess文件就会读取。子目录的配置文件会覆盖父级目录的配置文件。分布式配置文件的优点是不需要重启Apache服务器配置就能生效;缺点是读取这些文件会增加服务器的负担,降低服务器的性能。
本案例要求配置域名为www.admin.test的虚拟主机,站点目录为C:\web\www\www.admin.test,关闭目录浏览功能,开启分布式配置文件,只允许本地访问。
①在hosts文件中配置IP地址和域名的映射关系,虚拟主机www.admin.test映射的IP地址是127.0.0.1。
②在httpd-vhost.conf文件中配置虚拟主机www.admin.test,使用Options -Indexes关闭目录浏览功能,使用AllowOverride All配置项开启分布式配置文件,使用Require local配置项允许本地访问。
③创建站点目录C:\web\www\www.admin.test,在该目录下创建index.html文件,通过浏览器访问该文件,查看虚拟主机是否配置正确。
本书在配套源码包中提供了本案例的开发文档和完整代码,读者可以参考进行学习。