首页 > 代码库 > 笔记十一

笔记十一

#####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


  


本文出自 “12097560” 博客,请务必保留此出处http://12107560.blog.51cto.com/12097560/1882989

笔记十一