虚拟主机的设定有很多种方法,以下基本上列出了常用的方法,不过有些方法需要和DNS服务器配合使用!
下面的包括以下内容
A.用户Web目录发布
B.基于端口的虚拟主机设置
C.基于IP的虚拟主机(一个域名对应一个不同的IP地址)
D.基于名称的虚拟主机
E.使用用户认证来限制某些文档的访问(.htaccess)
虽然是基于红旗 3.0做的,不过各个发布版本都适用,只要大家用的都是Apache
1、用户Web目录
A.编辑httpd.conf文件
UserDir public_html
这样用户就可以通过http://localhost/~user/ (有时个少了'/'就可能看不到了) 来访问关于user这个用户的网站/home/user/public_html
B.用户在自己目录中创建public_html,并修改相应权限
#chmod 705 /home/user
#chmod 705 /home/user/public_html
C.在用户public_html下创建DirectoryIndex 中设定的默认首页
D.用户目录下其它目录应设定成别人不能访问(700)
E.去掉~
在httpd.conf中添加 Alias /user /home/user/public_html/
或 ln -s /home/user/public_html /var/www/html/user
这们就可以通过http://localhost/user/ 访问到了
不过要打开Options FollowSymLinks 这个设定在httpd.conf中
F.让用户Web目录中支持cgi
将下面这段放入httpd.conf中,然后重新启动Apache即可.
<DirectoryMatch "/home/[a-z0-9]+/public_html/cgi-bin">
Options ExecCGI
AddHandler cgi-script .cgi .pl .exe
</DirectoryMatch>
上面这个设定是说:凡是账号是小写字母或数字所组成的使用者,都为其打开cgi-bin目录执行CGI程序的权限。
并且,设定凡是档案名是cgi,pl,exe者,皆视为cgi程式,而按cgi程式的处理方式来对待它。
2、虚拟主机设定
A.基于端口的虚拟主机设置
下面是apache的配置文件/etc/httpd/conf/httpd.conf中虚拟主机部分的配置:
Listen 80
Listen 192.168.11.8:81
Listen 192.168.11.8:82
<VirtualHost 192.168.11.8:81>
documentroot /www/web.company.com/staging/htdocs/
scriptalias /cgi-bin /www/web.company.com/staging/cgi-bin/
transferlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/staging/%Y/%m/%d/access_log"
errorlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/staging/%Y/%m/%d/error_log"
</VirtualHost>
<VirtualHost 192.168.11.8:82>
documentroot /www/web.company.com/developer/htdocs/
scriptalias /cgi-bin /www/web.company.com/developer/cgi-bin/
transferlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/developer/%Y/%m/%d/access_log"
errorlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/developer/%Y/%m/%d/error_log"
</VirtualHost>
注:上面是基于端口的虚拟主机设置,要访问测试服务器,用http://www.aaa.com:81/
开发服务器用http://www.aaa.com:82/
上面的transferlog and errorlog用了不是默认的格式,而是Apache网站上建议的这种每天
一个文件的年/月/日格式,可从http://www.ford-mason.co.uk/resources/cronolog/下载编译
后安装在/usr/local/apache/bin/cronolog,可查看Apache网站获得更多信息。
http://httpd.apache.org/docs/misc/FAQ.html#rotate
b.基于IP的虚拟主机(一个域名对应一个不同的IP地址)
步骤: 1).在服务器上让一块网卡上设定多个IP地址
ifconfig eth0:0 192.168.0.200
ifconfig eth0:1 192.168.0.210
2).在DNS服务器中做好IP地址与域名的绑定
如:www.aaa.com 192.168.0.100
www2.aaa.com 192.168.0.200
www3.aaa.com 192.168.0.210
3).调整httpd.conf
<VirtualHost 192.168.0.100>
ServerAdmin root@aaa.com
DocumentRoot /www/site1
ServerName www.aaa.com
</VirtualHost>
<VirtualHost 192.168.0.200>
ServerAdmin root@aaa.com
DocumentRoot /www/site2
ServerName www2.aaa.com
</VirtualHost>
这样输入www.aaa.com 就是访问/www/site1中的网页
www2.aaa.com 就是访问/www/site2中的网页
c.基于名称的虚拟主机
服务器中只有一个IP地址,要为多个域名共同提供服务
步骤:1)在DNS服务器中做好IP地址与域名的绑定
如:www.aaa.com 192.168.0.100
www2.aaa.com 192.168.0.100
www3.aaa.com 192.168.0.100
2)调整httpd.conf文件中的内容
NameVirtualHost 192.168.0.100 ;基于名称的虚拟主机的IP地址
<VirtualHost 192.168.0.100>
ServerAdmin root@aaa.com
DocumentRoot /www/site1
ServerName www.aaa.com
</VirtualHost>
<VirtualHost 192.168.0.100>
ServerAdmin root@aaa.com
DocumentRoot /www/site2
ServerName www2.aaa.com
</VirtualHost>
这样访问的结果和上面相同,只不过在服务器中只用了一个IP地址
d.使用用户认证来限制某些文档的访问(.htaccess)
步骤:1).编辑httpd.conf
;控制/www/site1下各目录的访问权限
<Directory "/www/site1">
AllowOverride All
;目录的访问权限由目录下的.htaccess文件来控制
</Directory>
2).在/www/site1下生成编辑控制文件.htaccess
#vi .htaccess
内容如下:
AuthUserFile /www/pwd ;指定存放用户信息的文件
AuthType Basic ;认证类型(基本型)
AuthName "Database Security Zone" ;提示信息
<Limit GET POST>
require valid-user ;用户认证valid-user 组认证valid-group
</limit>
3).生成用户密码文件/www/pwd
#htpasswd -c /www/pwd test ;程序/usr/bin/htpasswd
--------- ----
密码文件 用户
4).重新启动Apache守护进程
5).测试 访问http://www.aaa.com 应该会提示输入用户名和密码 |