#####apache的虛擬主機php
在desktop端:html
cd /etc/httpd/conf.d/mysql
vim news.conf 修改內容爲:linux
1 <Virtualhost *:80>web
2 Servername news.westos.comsql
3 Documentroot /var/www/virtual/news.westos.com/htmlshell
4 Customlog "logs/news.log" combined數據庫
5 </Virtualhost>apache
6 <Directory "/var/www/virtual/news.westos.com/html">vim
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、$一、$二、$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