测试说明:本测试重点考察在linux环境下搭建LAMP虚拟主机环境配置和调试排错的能力。请按任务要求在虚拟机上完成操做任务,并在实验报告上记录主要操做步骤和配置文件中编辑的内容。测试环境为虚拟机centos6.6,测试时间为100分钟。
所需软件包能够从ftp://172.18.74.252
下载,yum源为ftp://172.18.74.252/centos6.6
php
注意:为方便测试关闭防火墙(#services iptables stop
),关闭SElonux(# setenforce 0
)html
任务1:配置虚拟机网络地址,使之与主机互相ping通。 (20分)mysql
要求:设置虚拟机网卡为NAT模式,启动登陆虚拟机,配置其网卡地址为静态地址,与虚拟机vmnet8在同一网段,最后三位数为“学号后三位mod254”,虚拟机主机名为姓名全拼。linux
检查点:虚拟机与主机可以互相ping通,虚拟机可以访问互联网。web
提示:编辑/etc/sysconfig/network-scripts/ifcfg-eth*
文件,/etc/sysconfig/network
文件,重启network
服务;或者直接使用ifconfig
命令修改IP地址。sql
任务2:安装bind软件包,使之可以提供域名解析服务。 (20分)shell
要求:使用yum方式安装bind软件包,设立“姓名全拼.com”和“学号.com”两个正向区域,并分别设置www主机A记录地址为虚拟机地址。数据库
检查点:主机ping“www.[姓名全拼].com
”和“www.[学号].com
”能够与虚拟主机通讯。apache
提示:编辑/etc/named.conf
文件和/var/named/
区域数据文件,使用named-checkconf
和named-checkzone
进行检查,改变区域数据文件所属组,重启named
服务或rndc reload
。注意检查主机dns服务器配置为虚拟机地址。vim
任务3:安装apache软件,配置基于名字的虚拟主机。 (20分)
要求:使用源码方式安装apache,配置两个基于名字的虚拟主机,“www.[姓名全拼].com
”和“www.[学号].com
”,虚拟主机目录在/var/wwwroot
下,目录名为域名。
检查点:从主机访问“www.[姓名全拼].com
”和“www.[学号].com
”站点的默认主页能够分别看到“this’s 姓名 site”和“this’s 学号 site”。
提示:编辑/usr/local/apache/conf/httpd.conf
文件配置虚拟主机,注意配置虚拟主机目录的访问权限;在/var/wwwroot
创建虚拟主机目录,编辑index.html文件。
任务4:安装mysql,建立数据库和数据表并输入数据。 (10分)
要求:使用yum方式安装mysql-server
,改变root
用户登陆密码为123456
,建立数据库project
。
/* 建立表 */ create table news ( id int unsigned auto_increment primary key, title varchar(60) not null, content text not null, addtime timestamp default current_timestamp not null ); /*插入测试数据*/ insert into news (title, content) values('新闻标题1', '新闻内容1'), ('新闻标题2','新闻内容2');
检查点:select * from news;
显示所有记录,注意mysql数据库的编码格式。
提示:改密码 #mysqladmin –u root –p password
新密码字符
任务5:安装PHP环境,编写运行php脚本。 (10分)
要求:使用yum方式安装PHP,编辑index.php文件放到“学号”虚拟主机,使之可以链接mysql数据库,读取显示数据表的内容。
检查点:在主机浏览器访问http://www.[学号].com/index.php
,显示数据表news的内容。
提示:拷贝libphp 5.so
,安装php_mysql
软件包,编辑httpd.conf
,注意要重启apache
任务6:安装vsftp软件包,配置虚拟主机的ftp环境。 (10分)
要求:使用yum方式安装vsftpd。创建用户“姓名全拼”和“学号”,设定用户主目录为/var/wwwroot/[姓名全拼].com
和/var/wwwroot/[学号].com
,密码都为123
。
检查点:从主机能够访问ftp站点,并上传网站内容。
任务7:使用ab性能测试软件,优化虚拟主机性能。 (10分)
要求:使用apache自带的ab软件测试虚拟主机性能,并记录最优结果。
提示:/usr/local/apache/bin/ab –c [并发数] –n [访问次数] http://www.[学号].com/index.php
Linux shell 脚本以下:
#!/bin/bash #-------------------------------------------- # 这是一个注释 # author: tong707 # site: https://blog.51cto.com/tong707/ # slogan: 学的不只是技术,更是梦想! #-------------------------------------------- # # You can enter your information following command: # ./install.sh -n [name] -s [student number] # # You can also configure your information from # here ( your_name, your_stu_number ), # then, enter the following command: # # ./install.sh -y # # your name your_name='zhangsan' # your student number your_stu_number='201522450123' # use local ftp yum source uselocal="true" # enable both local and internet yum sources enabledTogether="false" # modify eth0 to ethx modifyeth0="true" # ethx's name cd /root/ ifconfig >> ifconfig.txt if_str=$(cat ifconfig.txt | sed -n '1p') ethxname=`expr substr "${if_str}" 1 4` rm -rf /root/ifconfig.txt if [ $ethxname == "eth0" ] then modifyeth0="false" fi # define function: How to use this script? showHelp(){ echo -e "\033[32m How to Use this Shell Script?\033[0m" echo -e "\033[32m # $0 -n [name] -s [student number]\033[0m" echo -e "" exit } # receive parameters if [ $# == 4 ] then if [ $1 == "-n" -a $3 == "-s" ] then # echo "OK" your_name=$2 your_stu_number=$4 elif [ $1 == "-s" -a $3 == "-n" ] then # echo "OK" your_name=$4 your_stu_number=$2 else # echo "Help" showHelp fi elif [ $# == 1 ] then if [ $1 == "-y" ] then # pass echo -e "" else # echo "Help" showHelp fi else # echo "Help" showHelp fi # show user info echo -e "" date time1=`date +%s` echo -e "" echo -e " [ \033[32mINFO\033[0m ] your name is: \033[32m${your_name}\033[0m " echo -e " [ \033[32mINFO\033[0m ] your student number is: \033[32m${your_stu_number}\033[0m " echo -e "" sleep 2s # student number after 3 your_stu_num=`expr substr ${your_stu_number} 10 3` # the 4th part of the IP address your_ip_4=`expr ${your_stu_num} % 254` # the 3rd part of the IP address cd /root/ ifconfig >> ifconfig.txt if_str=$(cat ifconfig.txt | sed -n '2p') your_ip_3=`echo ${if_str} | cut -d '.' -f 3` rm -rf /root/ifconfig.txt # note #vim /etc/udev/rules.d/70-persistent-net.rules # turn off the firewall echo -e "\033[32m [ INFO ] Turning Off the Firewall ... \033[0m" service iptables stop setenforce 0 #echo -e "\033[32m [ INFO ] [ Firewall Closed Successfully ] \033[0m" echo -e "\n\n" # use ftp as the yum source yum install gcc -y if [ ${uselocal} == "true" ] then echo -e "\033[32m [ INFO ] Using FTP Server As the Yum Source ... \033[0m" mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/bak/ echo -e "[FTP]" > /etc/yum.repos.d/ftp.repo echo -e "name=CentOS6.6" >> /etc/yum.repos.d/ftp.repo echo -e "baseurl=ftp://172.18.72.252/centos6.6/" >> /etc/yum.repos.d/ftp.repo echo -e "gpgcheck=0" >> /etc/yum.repos.d/ftp.repo if [ ${enabledTogether} == "true" ] then # test START mv /etc/yum.repos.d/bak/CentOS-* /etc/yum.repos.d/ yum install yum-plugin-priorities.noarch -y echo -e "priority=1" >> /etc/yum.repos.d/ftp.repo #echo -e "priority=10" >> /etc/yum.repos.d/CentOS-* # END fi yum list | tail -n 20 echo -e "\033[32m [ INFO ] Set FTP Source Successfully \033[0m" echo -e "\n\n" fi # modify the host name echo -e "\033[32m [ INFO ] Modify the Host Name ... \033[0m" echo -e "NETWORKING=yes" > /etc/sysconfig/network echo -e "HOSTNAME=${your_name}" >> /etc/sysconfig/network hostname ${your_name} hostname echo -e "Hello, ${your_name}" #echo -e "\033[32m [ INFO ] [ Modify the Host Name Successfully ] \033[0m" echo -e "\n\n" # modify the host IP address echo -e "\033[32m [ INFO ] Modify the Host IP Address ... \033[0m" service network restart sed -i '/ONBOOT/d' /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/BOOTPROTO/d' /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "BOOTPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "DNS1=192.168.${your_ip_3}.${your_ip_4}" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "DNS2=202.206.192.33" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "IPADDR=192.168.${your_ip_3}.${your_ip_4}" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo -e "GATEWAY=192.168.${your_ip_3}.2" >> /etc/sysconfig/network-scripts/ifcfg-eth0 if [ ${modifyeth0} == "true" ] then # test START sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i "s/DEVICE=eth0/DEVICE=${ethxname}/g" /etc/sysconfig/network-scripts/ifcfg-eth0 mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-${ethxname} # END fi ifconfig sed -i '$d' /etc/resolv.conf echo -e "nameserver 192.168.${your_ip_3}.${your_ip_4}" >> /etc/resolv.conf echo -e "nameserver 202.206.192.33" >> /etc/resolv.conf ping 127.0.0.1 -c 4 service network restart ping 127.0.0.1 -c 4 ifconfig echo -e " [\033[32m INFO \033[0m] Please SSH this IP address:\033[31m 192.168.${your_ip_3}.${your_ip_4} \033[0m" echo -e "\033[32m [ INFO ] Modify the Host IP Address Successfully \033[0m" echo -e "\n\n" sleep 2s # install the bind package echo -e "\033[32m [ INFO ] Install the Bind Package ... \033[0m" yum install bind -y # configure the named configuration file echo -e "\033[32m [ INFO ] Configure the named.conf ... \033[0m" cd /etc/ sed -i "s/127.0.0.1/any/g" named.conf sed -i "s/localhost/any/g" named.conf sed -i "/listen-on-v6/d" named.conf sed -i '/include "/d' named.conf echo -e "zone \"${your_name}.com\" IN {" >> named.conf echo -e " type master;" >> named.conf echo -e " file \"${your_name}.com.zone\";" >> named.conf echo -e "};" >> named.conf echo -e "" echo -e "zone \"${your_stu_number}.com\" IN {" >> named.conf echo -e " type master;" >> named.conf echo -e " file \"${your_stu_number}.com.zone\";" >> named.conf echo -e "};" >> named.conf echo -e "" >> named.conf echo -e "include \"/etc/named.rfc1912.zones\";" >> named.conf echo -e "include \"/etc/named.root.key\";" >> named.conf echo -e "" >> named.conf cd ~ # configure the zone file echo -e "\033[32m [ INFO ] Configure the Zone File ... \033[0m" cd /var/named/ cp named.localhost ${your_name}.com.zone cp named.localhost ${your_stu_number}.com.zone sed -i '$d' ${your_name}.com.zone sed -i '$d' ${your_name}.com.zone sed -i '$d' ${your_stu_number}.com.zone sed -i '$d' ${your_stu_number}.com.zone echo -e " A 192.168.${your_ip_3}.${your_ip_4}" >> ${your_name}.com.zone echo -e "www IN A 192.168.${your_ip_3}.${your_ip_4}" >> ${your_name}.com.zone echo -e " A 192.168.${your_ip_3}.${your_ip_4}" >> ${your_stu_number}.com.zone echo -e "www IN A 192.168.${your_ip_3}.${your_ip_4}" >> ${your_stu_number}.com.zone # modify the limit echo -e "\033[32m [ INFO ] Modify the Limit ... \033[0m" chown root:named /var/named/*.com.zone named-checkconf service named restart ping www.${your_name}.com -c 4 echo -e "" ping www.${your_stu_number}.com -c 4 rm -rf /var/run/yum.pid echo -e "\033[32m [ INFO ] Install the Bind Package Successfully \033[0m" echo -e "\n\n" # install apache web server echo -e "\033[32m [ INFO ] Install Apache Web Server ... \033[0m" echo -e "\033[32m [ INFO ] Install Apache Web Server ( install gcc ) ... \033[0m" yum install gcc -y cd ~ echo -e "\033[32m [ INFO ] Install Apache Web Server ( download httpd package ) ... \033[0m" wget ftp://172.18.72.252/httpd-2.2.34.tar.gz sleep 2s tar -zxvf httpd-2.2.34.tar.gz cd httpd-* echo -e "\033[32m [ INFO ] Install Apache Web Server ( configure apache2 ) ... \033[0m" ./configure --prefix=/usr/local/apache2 echo -e "\033[32m [ INFO ] Install Apache Web Server ( make install apache2 ) ... \033[0m" make && make install cd /usr/local/apache2/bin/ echo -e "\033[32m [ INFO ] Install Apache Web Server ( start apache2 ) ... \033[0m" ./apachectl start cd ~ wget http://localhost:80/index.html cat index.html sleep 2s cd ~ ls # create files and folders echo -e "\033[32m [ INFO ] Create Files and Folders ... \033[0m" mkdir /var/wwwroot/ cd /var/wwwroot/ mkdir ${your_name}.com mkdir ${your_stu_number}.com ls echo -e "<h1>This is wwwroot</h1>" >> /var/wwwroot/index.html echo -e "<?php phpinfo(); ?>" >> /var/wwwroot/info.php echo -e "<h1>This's ${your_name} site</h1>" >> /var/wwwroot/${your_name}.com/index.html echo -e "<h1>This's ${your_stu_number} site</h1>" >> /var/wwwroot/${your_stu_number}.com/index.html echo -e "<?php phpinfo(); ?>" >> /var/wwwroot/${your_name}.com/info.php echo -e "<?php phpinfo(); ?>" >> /var/wwwroot/${your_stu_number}.com/info.php cd ~ # configure apache virtual host echo -e "\033[32m [ INFO ] Configure Apache Virtual Host ... \033[0m" cd /usr/local/apache2/conf/ sed -i 's/\/usr\/local\/apache2\/htdocs/\/var\/wwwroot\//g' httpd.conf sed -i '/httpd-vhosts/s/^#//' httpd.conf cd /usr/local/apache2/conf/extra/ sed -i '27,$d' httpd-vhosts.conf echo -e "" >> httpd-vhosts.conf echo -e "" >> httpd-vhosts.conf echo -e "<VirtualHost *:80>" >> httpd-vhosts.conf echo -e " DocumentRoot \"/var/wwwroot/${your_name}.com/\"" >> httpd-vhosts.conf echo -e " ServerName www.${your_name}.com" >> httpd-vhosts.conf echo -e "</VirtualHost>" >> httpd-vhosts.conf echo -e "" >> httpd-vhosts.conf echo -e "<VirtualHost *:80>" >> httpd-vhosts.conf echo -e " DocumentRoot \"/var/wwwroot/${your_stu_number}.com/\"" >> httpd-vhosts.conf echo -e " ServerName www.${your_stu_number}.com" >> httpd-vhosts.conf echo -e "</VirtualHost>" >> httpd-vhosts.conf echo -e "" >> httpd-vhosts.conf echo -e "" >> httpd-vhosts.conf cd /usr/local/apache2/bin/ ./apachectl restart # test visit webpage echo -e "\033[32m [ INFO ] Test Visit Website ... \033[0m" cd ~ mkdir /root/view cd /root/view/ wget http://www.${your_name}.com/index.html mv index.html ${your_name}.com.html wget http://www.${your_stu_number}.com/index.html mv index.html ${your_stu_number}.com.html cd ~ echo -e "${your_name}.com.html" cat /root/view/${your_name}.com.html cd ~ sleep 2s echo -e "" cd ~ echo -e "${your_stu_number}.com.html" cat /root/view/${your_stu_number}.com.html cd ~ sleep 2s echo -e "" cd ~ rm -rf /var/run/yum.pid echo -e "\033[32m [ INFO ] Install Apache Web Server Successfully \033[0m" echo -e "\n\n" # install MySQL echo -e "\033[32m [ INFO ] Install MySQL Server ... \033[0m" yum install mysql-server -y #mysqladmin -u root -p password 123456 sed -i "7 i\skip-grant-tables" /etc/my.cnf service mysqld restart mysql -s -e "USE mysql; UPDATE user SET Password = password('123456') WHERE User='root';" sed -i '/skip-grant-tables/d' /etc/my.cnf service mysqld restart # modify data echo -e "\033[32m [ INFO ] Insert Data to Database ... \033[0m" echo -e "" mysql -uroot -p123456 -s -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES;" mysql -uroot -p123456 -s -e "CREATE DATABASE IF NOT EXISTS project;" mysql -uroot -p123456 -s -e "SET NAMES 'UTF8'; USE project; CREATE TABLE IF NOT EXISTS news( id INT unsigned auto_increment primary key, title VARCHAR(60) not null, content TEXT not null, addtime timestamp default current_timestamp not null )DEFAULT CHARSET=UTF8;" mysql -uroot -p123456 -s -e "SET NAMES 'UTF8'; USE project; INSERT INTO news(title, content) VALUES('新闻标题1', '新闻内容1'), ('新闻标题2','新闻内容2');" echo -e "\033[32m [ INFO ] Show Data from Database ... \033[0m" mysql -uroot -p123456 -e "SET NAMES 'UTF8'; USE project; SELECT * FROM news WHERE 1;" sleep 2s rm -rf /var/run/yum.pid echo -e "\033[32m [ INFO ] Install MySQL Server Successfully \033[0m" echo -e "\n\n" # install php echo -e "\033[32m [ INFO ] Install PHP ... \033[0m" yum install php php-mysql -y cp /usr/lib64/httpd/modules/libphp5.so /usr/local/apache2/modules/ echo -e "" >> /usr/local/apache2/conf/httpd.conf echo -e "Include /etc/httpd/conf.d/php.conf" >> /usr/local/apache2/conf/httpd.conf echo -e "AddType application/x-httpd-php .php" >> /usr/local/apache2/conf/httpd.conf echo -e "DirectoryIndex index.php index.html" >> /usr/local/apache2/conf/httpd.conf echo -e "" >> /usr/local/apache2/conf/httpd.conf cd /usr/local/apache2/bin/ ./apachectl restart echo -e "<?php header('Content-Type:text/html; charset=utf-8'); \$con = mysql_pconnect('localhost', 'root', '123456', true); mysql_query(\"SET NAMES 'UTF8'\", \$con); mysql_select_db('project'); \$str = 'SELECT * FROM news WHERE 1;'; \$result = mysql_query(\$str, \$con); \$arr = array(); \$i = 0; if(\$result) { while(\$row = mysql_fetch_array(\$result)) { \$arr[\$i] = array( 'id' => \$row['id'], 'title' => \$row['title'], 'content' => \$row['content'], 'addtime' => \$row['addtime'] ); \$i++; } print_r(\$arr); } else { echo 'Connecting MySQL ERROR.'; } ?>" > /var/wwwroot/${your_stu_number}.com/index.php cd /usr/local/apache2/bin/ ./apachectl restart cd /root/view/ echo -e "" wget http://www.${your_stu_number}.com/index.php mv index.php ${your_stu_number}.com.php cd ~ echo -e "${your_stu_number}.com.php" cat /root/view/${your_stu_number}.com.php sleep 2s cd ~ rm -rf /var/run/yum.pid cd /usr/local/apache2/bin/ ./apachectl restart echo -e "" echo -e "\033[32m [ INFO ] Install PHP Successfully \033[0m" echo -e "\n\n" # install vsftpd echo -e "\033[32m [ INFO ] Install vsftpd ... \033[0m" yum install vsftpd -y sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" /etc/vsftpd/vsftpd.conf useradd -d /var/wwwroot/${your_name}.com/ -p '$6$sUx1urDQ$KRzEMQ4VvIonSoAQDtN4KJKjU1qcn6VVtYwxHuhSkNk6vxaevjyV9bIUTh77kdxW6CehQNggUSqKO5K2fjPHh/' ${your_name} useradd -d /var/wwwroot/${your_stu_number}.com/ -p '$6$sUx1urDQ$KRzEMQ4VvIonSoAQDtN4KJKjU1qcn6VVtYwxHuhSkNk6vxaevjyV9bIUTh77kdxW6CehQNggUSqKO5K2fjPHh/' ${your_stu_number} chown -R ${your_name}:${your_name} /var/wwwroot/${your_name}.com chown -R ${your_stu_number}:${your_stu_number} /var/wwwroot/${your_stu_number}.com chmod -R 777 /var/wwwroot/${your_name}.com chmod -R 777 /var/wwwroot/${your_stu_number}.com service vsftpd start cd ~ echo -e "\033[32m [ INFO ] Install vsftpd Successfully \033[0m" echo -e "\033[32m [ INFO ] All the installation is completed !!! \033[0m" echo -e "\n\n" # use ab to test virtual host performance echo -e "" echo -e "\033[32m [ INFO ] Use ab to Test Virtual Host Performance ... \033[0m" echo -e "" echo -e " [ \033[32mINFO\033[0m ] TEST START ..." echo -e "\n\n" # TEST START echo -e " [ \033[32mINFO\033[0m ] requests=10000 concurrency=100" echo -e " --------------------------------------- \n" /usr/local/apache2/bin/ab -n 10000 -c 100 http://www.${your_stu_number}.com/index.php echo -e "\n\n" echo -e " [ \033[32mINFO\033[0m ] requests=10000 concurrency=150" echo -e " --------------------------------------- \n" /usr/local/apache2/bin/ab -n 10000 -c 150 http://www.${your_stu_number}.com/index.php echo -e "\n\n" echo -e " [ \033[32mINFO\033[0m ] requests=10000 concurrency=200" echo -e " --------------------------------------- \n" /usr/local/apache2/bin/ab -n 10000 -c 200 http://www.${your_stu_number}.com/index.php echo -e "\n\n" echo -e " [ \033[32mINFO\033[0m ] requests=15000 concurrency=100" echo -e " --------------------------------------- \n" /usr/local/apache2/bin/ab -n 15000 -c 100 http://www.${your_stu_number}.com/index.php echo -e "\n\n" echo -e " [ \033[32mINFO\033[0m ] requests=15000 concurrency=200" echo -e " --------------------------------------- \n" /usr/local/apache2/bin/ab -n 15000 -c 200 http://www.${your_stu_number}.com/index.php # END # install sl START clear mkdir /root/epel/ cd /root/epel/ wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -ivh epel-release* yum repolist -y yum install sl -y clear sl cd ~ # install sl END # Successfully clear echo -e "" time2=`date +%s` duration=`expr ${time2} - ${time1}` nowDate=`date` echo -e " [\033[32m INFO \033[0m] The time is now: \033[31m${nowDate}\033[0m" echo -e "" echo -e " [\033[32m INFO \033[0m] The installation takes a total of \033[31m${duration}\033[0m seconds." echo -e "" echo -e " [\033[32m INFO \033[0m] Please SSH this IP address:\033[31m 192.168.${your_ip_3}.${your_ip_4} \033[0m" echo -e "" echo -e " [\033[32m INFO \033[0m] The Script Has Finished Running, Good Luck !!!" echo -e "" #END