目标:
- 建立DNS服务器,同时为linux.com, php.net, apache.org三个域提供解析;要求,每个域内的www主机均指向本机唯一的IP;
- 建立httpd服务器,分别为www.linux.com, www.php.net, www.apache.org 各提供一个虚拟主机,位置分别为/www/linux,/www/php,/www/apache;
- 每个虚拟主机的要使用各自的错误日志和访问日志,日志文件名称以虚拟主机名称打头;三个虚拟主机的日志文件都位于/www/logs目录中;
- www.linux.com虚拟主机仅允许来自172.16.0.0/16(除了172.16.100.0/24)的主机访问,且支持基于SSL的访问;
- www.php.net虚拟主机仅允许提供了帐号和密码的请求者访问;
- 通过http://www.apache/mail可以访问/web/mail目录中的网页,而且此目录允许执行CGI脚本(请测试通过)
我们开始吧!我的环境是redhat 5.8,已安装自带的bind97,bind97_lib,bind97_utils,httpd2.2.3,
1.建立DNS服务器。建立/etc/named.conf,并为之建立各自区域文件,启动named服务,测试,并把测试机(我用的是我的xp)的DNS改为刚建立的DNS的地址
1: /etc/named.conf :2:3: options {4: directory "/var/named";5: };6: zone "linux.com" IN {7: type master;8: file "linux.php.apache";9: };10: zone "php.net" IN {11: type master;12: file "linux.php.apache";13: };14: zone "apache.org" IN {15: type master;16: file "linux.php.apache";17: };18:19: /var/named/linux.php.apache20:21:22: $TTL 8640023: @ IN SOA ns admin (24: 00125: 2H26: 5M27: 7D28: 2H )29: IN NS ns30: ns IN A 172.16.1.131: www IN A 172.16.1.1
2.修改/etc/httpd/conf/httpd.conf,注释主服务器区域的文档目录栏,取消基于域名的虚拟主机选项,然后建立虚拟机主机.新建几个目录,与日志文件,更改权限
1: #DocumentRoot "/var/www/html" ##282行左右2: NameVirtualHost *:80 ##973行左右取消注释3: ##在最后建立三个虚拟主机4: <VirtualHost *:80>5: ServerName "www.linux.com"6: DocumentRoot /www/linux7: ErrorLog /www/logs/linux-error_log8: CustomLog /www/logs/linux-access_log common9: </VirtualHost>10: <VirtualHost *:80>11: ServerName "www.php.net"12: DocumentRoot /www/php13: ErrorLog /www/logs/php-error_log14: CustomLog /www/logs/php-access_log common15: </VirtualHost>16: <VirtualHost *:80>17: ServerName "www.apache.org"18: DocumentRoot /www/apache19: ErrorLog /www/logs/apache-error_log20: CustomLog /www/logs/apache-access_log common21: </VirtualHost>22:23: mkdir /www/{linux,php,apache/logs}; ##建立目录24: touch /www/logs/{linux-error_log,linux-access_log,php-error_log,php-access_log,apache-access_log,apache-error_log};25: echo "I am linux " >/www/linux/index.html;26: echo "I am php " >/www/php/index.html;27: echo "I am linux " >/www/apache/index.html;28: chown apache:apache -R /www
3.修改名字为www.linux.com虚拟主机的访问权限
1: <VirtualHost *:80>2: ServerName "www.linux.com"3: DocumentRoot /www/linux4: ErrorLog /www/logs/linux-error_log5: CustomLog /www/logs/linux-access_log common6: <Directory "/www/linux">7: Order Allow,Deny8: Allow From 172.16.0.0/169: Deny From 172.16.100.0/2410: </Directory>11: </VirtualHost>
4.为www.linux.com建立证书,方法见http://laoguang.blog.51cto.com/6013350/1035608
5.安装mod_ssl这个模块,基于ssl访问的https由它提供,修改它的配置文件/etc/httpd/conf.d/ssl.conf
1: yum -y install mod_ssl ##已配好yum,自动安装2:3: /etc/httpd/conf.d/ssl.conf4:5: DocumentRoot "/www/linux" ##86行加入这两行6: ServerName www.linux.com7: SSLCertificateFile /etc/httpd/conf.d/linux.crt ##113行左右修改为SSL的证书的位置 (这是我建立证书的位置)8: SSLCertificateKeyFile /etc/httpd/conf.d/linux.key ##120行左右修改为SSL的私钥的位置
6.为www.php.net 设定访问权限
1: <VirtualHost *:80> 2: ServerName "www.php.net"
3: DocumentRoot /www/php 4: ErrorLog /www/logs/php-error_log 5: CustomLog /www/logs/php-access_log common 6: <Directory /www/php> 7: AllowOverride Authconfig 8: options none 9: Authtype basic 10: Authname "Hi,I'm secreat"
11: AuthUserFile /etc/httpd/conf.d/htpasswd 12: Require valid-user 13: </Directory> 14: </VirtualHost> 1: htpasswd -c -m /etc/httpd/conf.d/htpasswd laoguang 2: New password: 3: Re-type new password:
1: <VirtualHost *:80> 2: ServerName "www.apache.org"
3: DocumentRoot /www/apache 4: ErrorLog /www/logs/apache-error_log 5: CustomLog /www/logs/apache-access_log common 6: alias /mail "/web/mail"
7: AddHandler cgi-script .cgi 8: <Directory /web/mail> 9: Options execCGI 10: </Directory> 11: </VirtualHost> 1: vim /www/apache/test.cgi 2: 3: #!/bin/bash 4: cat <<EOF 5: Content-Type: text/html 6: 7: <pre> 8: $(/bin/date) 9: my name is `id -nu`
10: my hostname $HOSTNAME 11: `/bin/date` 12: `echo $PATH` 13: </pre> 14: EOF 15: 16: 17: ##浏览器访问 www.apache.org/mail/test.cgi看是否能正常执行