因为手里可用服务器资源有限,只能用apache虚拟机来完成更多的工作任务。当前的apache版本是2.2.4,与以前的版本相比,有很多地方做了改进,最大的一个差别是在主配置文件中以包含文件的方式把虚拟机单独做成一个文件,当然差别还有很多,这里只关注虚拟机。
系统 | solaris 10 |
Apache版本 | httpd-2.2.0 |
网络接口地址 | 192.168.27.201 |
Apache的安装路径 | /usr/local/apache2/ |
虚拟机的方式端口 | 8088 |
修改主配置文件/usr/local/apache2/conf/httpd.conf。用编辑器(vi等)打开主配置文件httpd.conf,把Include conf/extra/httpd-vhosts.conf这行(大概在395行的位置)前面的注释取消,使其包含功能生效。再在主配置文件加入虚拟机的监听“Listen 192.168.27.201:8088”(第一个字母‘L’是大写的)。修改加入的内容如下所示:
Listen 192.168.27.201:8088
…………..(省略若干,不用修改的地方)
Include conf/extra/httpd-vhosts.conf //虚拟机配置单独用一个文件,
//这种方式是主配置文件变小了,更易于维护。
修改虚拟机配置文件。它的目录在主配置文件httpd.conf中以包含的方式(Include)指出了路径是 /usr/local/apache2/conf/extra/httpd-vhosts.conf,如果打算用其他的文件,可以在主配置文件中重新指定。这个虚拟机配置文件是一个模版,给出了2个apache虚拟机的事例,把它们全部注释掉!注:如果是基于域名的虚拟机机制,NameVirtualHost *.80这行是必须的,因为我这里是基于端口(确切的说是基于IP地址)的虚拟机制,所以要把它注释掉。先照着模版加入下面的块到httpd-vhosts.conf:
< VIRTUALHOST 192.168.27.201:8088>
DocumentRoot "/www/docs" //虚拟机根文档目录
ServerName 192.168.27.201:8088
< /VIRTUALHOST>
然后回到apache的安装目录执行命令 bin/apachectl –t检查主配置文件语法是否正确,无误后再执行bin/apachectl –S 检查虚拟机的语法是否正确。接下来在虚拟机的根文档目录创建一个测试文档test.html,启动apache服务 bin/apachectl start&,用浏览器访问http://192.168.27.201,显示apache的默认页面,表明主配置文件是正常的;再访问http://192.168.27.201:8088/test.html.返还代码 403(禁止访问),页面内容为“你无法查看该网页…”,同样的问题已经有2个人遭遇过了,他们都一致认为,以前在apache1.3等老版本上就是这样设置的,应该不会这样呀!并且语法检查也通过了,是什么问题呢?打开主配置文件conf/httpd.conf,发现如下的块:
< DIRECTORY />
Options FollowSymLinks
AllowOverride None
Order deny,allow //先拒绝后允许
Deny from all //拒绝所有的访问
< /DIRECTORY>
这一个块就是对目录进行访问控制的,而且设置得非常严格,因此,我们必须手动加入虚拟机目录的权限控制块,才可以让用户正常访问虚拟机的目录及页面文件。有两个地方可以加入虚拟目录访问权限控制块:主配置文件httpd.conf和虚拟机配置文件httpd-vhost.conf,加在那一个地方更合适呢?当然选虚拟机配置文件,最重要的理由是维护起来更方便,可能也涉及安全方面的问题(这个我没有做个测试)。接下来就把目录访问控制块插入到虚拟机配置文件,其形式如下:
< VIRTUALHOST 192.168.27.201:8088>
DocumentRoot "/www/docs"
ServerName 192.168.27.201:8088
< DIRECTORY docs? www ?> //插入开始处
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
< /DIRECTORY> //插入结束处
< /VIRTUALHOST>
完成文件,检查语法,重启apache服务,再用浏览器访问虚拟机地址,这下应该正常了。