#####apache的虚拟主机
在desktop端:
cd /etc/httpd/conf.d/
vim news.conf 修改内容为:
1 <Virtualhost *:80>
2 Servername news.westos.com
3 Documentroot /var/www/virtual/news.westos.com/html
4 Customlog "logs/news.log" combined
5 </Virtualhost>
6 <Directory "/var/www/virtual/news.westos.com/html">
7 Require all granted
8 </Directory>
9 <Virtualhost *:443>
10 Servername news.westos.com
11 Documentroot /var/www/virtual/news.westos.com/html
12 Customlog "logs/news-443.log" combined
13 SSLEngine on
14 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
15 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
16 </Virtualhost>
systemctl restart httpd
附加:(使得没有开启虚拟主机的网址 如 music.westos.com 在用 https://music.westos.com 访问时使用默认的 https 目录)
vim default.conf 修改内容为:
1 <Virtualhost _default_:80>
2 Documentroot /var/www/html
3 Customlog "logs/default.log" combined
4 </Virtualhost>
5 <Directory "/var/www/html">
6 Require all granted
7 </Directory>
8 <Virtualhost *:443>
9 SSLEngine on
10 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
11 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
12 </Virtualhost>
测试(在其他主机或者虚拟机):
在浏览器中输入 https://news.westos.com 即可看到效果
#####apache的网页重写
(把所有80端口的请求全部重定向由https来处理,即 http --> https)
在desktop端:
cd /etc/httpd/conf.d/
vim news.conf 修改内容为:
1 <Virtualhost *:80>
2 Servername news.westos.com
3 RewriteEngine on
4 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
5 </Virtualhost>
6 <Directory "/var/www/virtual/news.westos.com/html">
7 Require all granted
8 </Directory>
9 <Virtualhost *:443>
10 Servername news.westos.com
11 Documentroot /var/www/virtual/news.westos.com/html
12 Customlog "logs/news-443.log" combined
13 SSLEngine on
14 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
15 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
16 </Virtualhost>
systemctl restart httpd
测试(在其他主机或者虚拟机):
在浏览器中输入 http://news.westos.com 即可看到浏览器自动的将 http://news.westos.com 转化为 https://news.westos.com
#####php
cd /var/www/html/
yum install php -y
vim index.php 编辑内容为:
1 <?php
2 phpinfo ();
3 ?>
vim /etc/httpd/conf/httpd.conf 修改内容为:
177 DirectoryIndex index.php file index.html
systemctl restart httpd
测试:
在其他主机浏览器输入 www.westos.com 即可看到 php 测试页
######cgi
定义:
通用网关接口(CGI)是网站上放置动态内容的最简单的方法。CGI脚本可用于许多目的,但是谨慎控制使用哪个CGI脚本以及允许谁添加和运行这些脚本十分重要。编写质量差的CGI脚本可能为外部***者提供了破坏网站及其内容安全性的途径。因此,在Web服务器级别和SELinux策略级别,都存在用于限制CGI脚本使用的设置。
实验执行操作:
cd /var/www/html/
mkdir cgi
vim index.cgi 编辑内容为:
1 #!/usr/bin/perl
2 print "Content-type: text/html\n\n";
3 print `date`; @@@!!!@@ 注意:此处 date 前后的符号为 “ ` ”
chmod +x index.cgi
vim /etc/httpd/conf.d/default.conf 修改内容为:
7 <Directory "/var/www/html/cgi">
8 Options +ExecCGI
9 AddHandler cgi-script .cgi
10 </Directory>
cd /var/www/
ls -Zd cgi-bin/
semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -FvvR /var/www/html/cgi/
systemctl restart httpd
测试(在其他主机):
在浏览器里输入 www.westos.com/cgi 进入后 点击 --> index.cgi
#####论坛的搭建######
yum install mariadb-server -y
systemctl start mariadb
mysql_secure_installation --> 创建mysql中root用户的密码
vim /etc/my.cnf 修改内容为:
10 skip-networking=1 ##防止mysql裸露在外网中
cd /var/www/html/
lftp 172.25.254.250
lftp 172.25.254.250:~> cd pub/
lftp 172.25.254.250:/pub> get Discuz_X3.2_SC_UTF8.zip
12486177 bytes transferred
lftp 172.25.254.250:/pub> quit
unzip Discuz_X3.2_SC_UTF8.zip
yum install php-mysql.x86_64 -y
chmod 777 upload/data/ upload/config/ -R 或者 chmod 777 upload/ -R
setenforce 0 ##此步一定要做,因为selinux会阻止Discuz
systemctl restart httpd
测试(在其他主机):
在浏览器里输入 172.25.254.107/upload 或者 www.westos.com/upload
首次进入修改root密码为 redhat ,再设置管理员用户密码即可。
######squid正向解析#####
在真机中(172.25.254.7):
执行 virt-manager --> 给desktop主机再添加一块网卡(即,使得desktop为双网卡)
在desktop端:
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0
vim ifcfg-eth0 修改内容为:
1 DEVICE=eth0
2 BOOTPROTO=none
3 IPADDR0=172.25.7.10
vim ifcfg-eth1 修改内容为:
1 DEVICE=eth1
2 BOOTPROTO=none
3 IPADDR0=172.25.254.107
systemctl restart network
yum install squid
vim /etc/squid/squid.conf 修改内容为:
56 http_access allow all ##允许所有人
62 cache_dir ufs /var/spool/squid 100 16 256 ##开启squid块,在squid下建立 16 个A级目录(缓冲区),每一个A级目录下面又有256个小模块(缓冲区)
systemctl restart squid
测试(server主机):
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0 修改内容为:
IPADDR0=172.25.7.11
systemctl restart network
在server中打开浏览器:172.25.254.250会出现报错信息
在浏览器界面进入 设置 --> Network --> Settings --> Manual proxy .. --> HTTP --> 172.25.7.10 3128 --> OK
再次在server中打开浏览器:172.25.254.250 会出现测试页面
########squid的反向解析 -- 接着上步 正向解析
在desktop端(172.25.7.10/172.25.254.107):
yum remove httpd squid -y
rm -fr /etc/httpd/conf.d/
rm -fr /etc/httpd/conf/
rm -fr /etc/squid/
netstat -antlpe | grep httpd
netstat -antlpe | grep squid
yum install squid
vim /etc/squid/squid.conf 修改内容为:
56 http_access allow all
59 http_port 80 vhost vport
60 cache_peer 172.25.254.7 parent 80 0 no-query
64 cache_dir ufs /var/spool/squid 100 16 256
systemctl restart squid
测试(server端 172.25.7.11):
在浏览器中输入 172.25.7.10 即可看到 172.25.254.7 的默认发布页面
#####squid 的轮循
在desktop端(172.25.7.10/172.25.254.107):
vim /etc/squid/squid.conf 修改内容为:
56 http_access allow all
59 http_port 80 vhost vport
60 cache_peer 172.25.254.7 parent 80 0 no-query originserver round-robin name=web1
61 cache_peer 172.25.254.8 parent 80 0 no-query originserver round-robin name=web2
62 cache_peer_domain web1 web2 www.lzt.com
64 cache_dir ufs /var/spool/squid 100 16 256
systemctl restart squid
注释:
cache_peer 172.25.254.7 parent 80 0 no-query originserver round-robin name=web1
缓存的是172.25.254.7,虚拟端口为--80,故障通知端口为无 -- 0,no-query 表示其没有邻居; originserver -- 参数指明是源服务器; round-robin -- 参数指明轮循方式请求分发到其中一台父节点; name--表示这一行为web1
测试(server端 172.25.7.11):
vim /etc/hosts 修改内容为:
6 172.25.254.107 www.lzt.com
7 172.25.7.10 www.lzt.com
在浏览器中输入 www.westos.com 即可看到 172.25.254.7 的默认发布页面 和 172.25.254.8 的默认发布页来回替换
##########脚本#########
Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。
创建新shell脚本
1. 创建包含bash命令的文本文件。文件的第一行应为:
#!/bin/bash
2. 使文件可执行(使用chmod +x scripts)
3. 将文件放置在用户的$PATH的目录中
~/bin – 用于用户的私有程序
/usr/local/bin – 本地开发、系统上的其他人使用的脚本
/usr/local/sbin - 本地开发、由root使用的脚本
直接运行脚本和使用source命令运行脚本是不同的!
脚本调试模式:
#!/bin/bash -x
# bash -x scripts
引用和转义
引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。
引用有三种类型:
1)弱引用
将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。
echo “can I have a $FRUIT”
echo “The current time is $(date +%r).”
2)强引用
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展:
echo “Make $$$ Fast”
rm 'untitled folder'
3)转义
非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而不是PATH变量的内容。)
echo Make \$\$\$ Fast\!
ls untitled\ folder
例如:
[root@localhost ~]# echo # not a comment #
[root@localhost ~]# echo \# not a comment #
# not a comment
[root@localhost ~]# echo \# not a comment \#
# not a comment #
[root@localhost ~]# echo '# not a comment #'
# not a comment #
[root@localhost ~]# echo '$HOME'
$HOME
[root@localhost ~]# echo "$HOME"
/root
[root@localhost ~]# echo "\$HOME"
$HOME
[root@localhost ~]# echo '`pwd`'
`pwd`
[root@localhost ~]# echo "\`pwd\`"
`pwd`
[root@localhost ~]# echo "`pwd`"
/root
[root@localhost ~]# echo '"Hello,world"'
"Hello,world"
[root@localhost ~]# echo "\"Hello, world\""
"Hello, world"
[root@localhost ~]# echo ""Hello, world""
Hello, world
Shell变量:
shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。
[root@maillinux ~]# a=1 ##此处定义的 a 的值不能在脚本里被调用
[root@maillinux ~]# echo $a
1
[root@maillinux ~]# echo $ab
[root@maillinux ~]# echo ${a}b
1b
[root@maillinux ~]# export a=2 ##此处定义的 a 的值可以在脚本里被调用,仅限此次登录,若退出,则会消除
vim /etc/profile 修改内容为:
77 export a=5 ##此处为用户环境变量,对当前用户生效
source /etc/profile
vim .bash_profile 修改内容为:
13 export a=4 ##此为系统环境变量对所有用户生效
source .bash_profile
当前用户优先读取 /etc/profile 中的值(系统先读 .bash_profile 文件中 a 的值,后读 /etc/profile 中 a 的值,可以认为第一次 a 的值被覆盖)
#####算术运算符
算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。
<variable>++ 增量后
<variable>-- 减量后
- 减法
+ 加法
** 幂运算
* 乘法
/ 除法
% 余数
+= 加等
-= 减等
###Shell计算命令:
用$[]表示数学运算:
# echo $[1+2]
# a=1; echo $[$[$a+1]*2]
用expr表示数学运算:
# echo `expr 1 + 2`
用let指示数学运算:
# let A=1+2
# echo $A
用(())表示数学运算: ##bash内建功能,效率高。
#!/bin/bash
for ((i=1;i<10;i++))
do
((j+=i))
done
echo $j
######循环
(1)for循环: 用于值列表中的相同命令的重复
[root@server0 ~]# for HOST in host{1..3};do echo $HOST;done
host1
host2
host3
[root@server0 ~]# for NUM in $(seq 2 2 8);do echo $NUM;done
2
4
6
8
循环与计算结合:
#!/bin/bash
for ((i=1;i<=100;i++))
do
((j+=i)) 等同于(#j=`expr $j + $i`)或(#let j+=i)或(#j=$[j+=i])
done
echo $j
也可以写成一行:
# for((i=0; i<=100; i++));do j=`expr $j + $i` ;done;echo $j
#######数据库备份示例:
#!/bin/bash
for DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')
do
echo "Backing up $DB"
mysqldump $DB > /dbbackup/$DB.dump
done
echo ""
for DBDUMP in /dbbackup/*
do
SIZE=$(stat --printf "%s\n" $DBDUMP)
echo "$DBDUMP
$SIZE"
done
##########Bash位置参数
有两种简单的方法可以将用户输入读入bash中的变量。第一个方法是使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:
交互式输入
# read -p 'Enter your first and last name: ' FIRST LAST
另一个方法是使用位置参数来读取传递给脚本的命令行参数或选项输入。
各种特殊变量存储传递的选项编号Bash解析的个别参数或整个原始命令行。
指定的位置参数总数:$#
位置参数自身:$0、$1、$2、$3....
所有位置参数: $@、$*
退出状态
Linux命令完成时,将返回退出状态。成功完成程序时,将返回0的推出状态。这被bash当作逻辑True值。非零退出状态通常表示发生了错误,并且被bash当作逻辑False值。
例如:grep的退出状态的含义:
0 – 在指定的文件中找到了模式
1 – 在指定的文件中未找到模式
>1 – 一些其他错误(无法打开文件、错误的搜索表达式等)
推出状态的值被存储在"?"中,可以使用以下命令查看:
# echo $?
##########test条件判断
test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语法,使用方括号"[]"将表达式括起来,这样更易于阅读。
语法:test EXPRESSION 或 [EXPRESSION]
非零或零长度字符串运算符:test -{n|z} STRING
[root@server0 ~]# [ -n westos ]; echo $?
0
[root@server0 ~]# [ -z westos ]; echo $?
1
#######字符串比较运算符:=、!=
[root@server0 ~]# [ abc = abc ]; echo $?
0
[root@server0 ~]# [ abc = ABC ]; echo $?
1
[root@server0 ~]# [ abc != ABC ]; echo $?
0
数字比较运算符:-eq、-ne、-lt、-le、-gt、-ge
[root@server0 ~]# [ 1 -eq 1 ]; echo $?
0
[root@server0 ~]# [ 1 -ne 1 ]; echo $?
1
[root@server0 ~]# [ 1 -gt 2 ]; echo $?
1
########文件状态运算符: test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY
[root@server0 ~]# [ -b /dev/sda ]; echo $?
1
[root@server0 ~]# [ -c /dev/zero ]; echo $?
0
[root@server0 ~]# [ -e /etc/passwd ]; echo $?
0
[root@server0 ~]# [ -f /etc/passwd ]; echo $?
0
[root@server0 ~]# [ -d /etc/passwd ]; echo $?
1
[root@server0 ~]# [ -L /etc/passwd ]; echo $?
1
########二进制文件运算符: -ef、-nt、-ot
[root@server0 bin]# [ /bin/mount -ef /usr/bin/mount ]; echo $?
0
[root@server0 bin]# [ /bin/mount -nt /usr/bin/mount ]; echo $?
1
[root@server0 bin]# [ /bin/mount -ot /usr/bin/mount ]; echo $?
1
##########逻辑运算符: -o、-a、!、&&、||
[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]; echo $?
1
[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]; echo $?
0
[root@server0 bin]# [ ! 2 -gt 1 ]; echo $?
1
########简单脚本例子
1. 10 秒倒计时
1 #!/bin/bash
2 for ((sec=10;sec>0;sec--))
3 do
4 echo -ne "After ${sec}s is end"
5 echo -ne "\r \r"
6 sleep 1
7 done
2. 1 分 10 秒倒计时
版本一(教学版):
1 #!/bin/bash
2 min=1
3 for ((sec=10;sec>=0;sc--))
4 do
5 echo -ne "After ${min}m ${sec}s "
6 sleep 1
7 echo -ne "\r \r"
8 while ["$sec" -le "0" -a "$min" -gt "0"]
9 do
10 echo -ne "After ${min}m ${sec}s is end"
11 echo -ne "\r \r"
12 ((min--))
13 sec=60
14 done
15 done
版本二:
1 #!/bin/bash
2 for ((sec=70;sec>0;sec--))
3 do
4 echo -ne "Come on, $(($sec/60)) minute $(($sec%60)) s later , New Year is c oming... "
5 echo -ne "\r \r"
6 sleep 1
7 done
3. ping 172.25.254.(1-10)
1 #!/bin/bash
2 for num in {1..10}
3 do
4 ping -c1 -w1 172.25.254.$num &> /dev/null && echo 172.25.254.$num is up || echo 172.25.254.$num is down
5 done
4. ping 172.25.254.(1-10)使用逻辑运算
1 #!/bin/bash
2 ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down
5. ping 172.25.254.x -- 报错版本
1 #!/bin/bash
2 [ -z "$*" ] && echo "error:please inpute ip adress" || (echo "now is ping.. "
3 ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down)
6. 备份数据库
yum install mariadb-server -y
systemctl start mariadb 然后设置root密码为redhat
1 #!/bin/bash
2 for bf in $(mysql -uroot -predhat -e "show databases;" -NE | grep -E "^\*|s chema$" -v)
3 do
4 echo "Backing up $bf"
5 mysqldump -uroot -predhat $bf > /mnt/$bf-`date`.dump
6 done
7.建立用户
1 #!/bin/bash
2 read -p "please input new username:" username
3 useradd $username &> /dev/null && echo useradd $username over || echo usera dd $username fail
4 read -p "please input newuser's password:" password
5 echo "$password" | passwd --stdin $username
8.数值范围的判断
1 #!/bin/bash
2 read -p "please input a number:" num
3 [ "$num" -ge 0 -a "$num" -le 10 ] && echo Yes, this num exits 0-10 || echo No, this num not exits 0-10