1.普通日誌格式(common logformat,CLF) common 大多很多天志分析軟件都支持這種格式php
2.參考日誌格式(referer logformat) referer 記錄客戶訪問站點的用戶身份
3.代理日誌格式(agent log format) agent 記錄請求的用戶代理
4.綜合日誌格式(combined log format) combined 結合以上三種日誌信息html
1.虛擬主機的加密node
在未製做以前mysql
製做https://news.westos.com 發佈頁面web
vim /etc/httpd/conf.d/music.confsql
<Virtualhost *:443>shell
Servername music.westos.comapache
Documentroot /var/www/virtual/music.westos.com/html小程序
Customlog "logs/music-443.log" combinedvim
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
</Virtualhost>
證書信息可在/etc/httpd/conf.d/ssl.conf中查看
注意:在vim中打開兩個文件 :sp ssl.conf
crtl+ w 上 切換到上一個文件
crtl+ w 下 切換到下一個文件
檢測
在瀏覽器,訪問 https://music.westos.com ,ssl.conf若是下配置
默認顯示能夠訪問的一個存在的https界面,訪問的是music的https,而不是https的defualt,
是由於/etc/httpd/conf.d/default.conf,並無設置https的訪問,而且/etc/httpd/conf.d/ssl.conf 沒有生效/var/www/html
vim /etc/httpd/conf.d/ssl.conf
56 <VirtualHost _default_:443>
57
58 # General setup for the virtual host,inherited from global configuration
59 #DocumentRoot"/var/www/html"
60 #ServerName www.example.com:443
若是
vim /etc/httpd/conf.d/default.conf
<Virtualhost *:443>
Documentroot /var/www/html
Customlog "logs/default-443.log" combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
</Virtualhost>
而且
vim /etc/httpd/conf.d/ssl.conf
56 <VirtualHost _default_:443>
57
58 # General setup for the virtual host, inheritedfrom global configuration
59 DocumentRoot"/var/www/html"
60 #ServerName www.example.com:443
在瀏覽器中訪問 https://music.westos.com/,獲得的結果頁面就是default的https(443)。
2.網頁重寫
訪問http://news.westos.com 自動跳轉到https://news.westos.com
百度就是這樣的哦~
vim /etc/httpd/conf.d/news.conf
<Virtualhost *:80>
Servername news.westos.com
RewriteEngine on
RewriteRule ^(/.*)$https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
<Directory "/var/www/virtual/news.westos.com/html">
Require all granted
</Directory>
<Virtualhost *:443>
Servername news.westos.com
Documentroot /var/www/virtual/news.westos.com/html
Customlog "logs/news-443.log" combined
SSLEngine on
SSLCertificateFile/etc/pki/tls/certs/www.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
</Virtualhost>
檢測
http下可執行腳本
1.php
yum install php -y
vim /var/www/html/index.php
<?php
phpinfo ();
?>
vim /etc/httpd/conf/httpd.conf
166 <IfModule dir_module>
167 DirectoryIndex index.phpindex.html
168 </IfModule>
檢測
2.cgi
cd /var/www/html/
mkdir cgi
1)vim/var/www/html/cgi/index.cgi 編寫cji腳本主頁
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print `date`;
查看apache幫助手冊~
chmod +xindex.cgi 給腳本加可執行權限
未加執行權限顯示此頁面
加了之後,成功顯示~~~
2)vim/etc/httpd/conf.d/default.conf使/var/www/html/cgi目錄下的cgi文件可執行
<Directory"/var/www/html/cgi">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
perl index.cgi 用perl執行cji腳本
檢測
a)setenforce 0
http://172.25.254.230/cgi/index.cgi
成功顯示~~~~
b)setenforce1
[root@web www]# ll -dZ cgi-bin/
drwxr-xr-x. root rootsystem_u:object_r:httpd_sys_script_exec_t:s0cgi-bin/
cgi-bin的上下文標籤
改變/var/www/html/cgi上下文標籤爲httpd_sys_script_exec_t(http可執行腳本)
semanage fcontext -a -thttpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -FvvR /var/www/html/cgi/
正向代理
服務器
yum install squid -y
56 http_access allow all
62 cache_dir ufs /var/spool/squid 10016 256
安裝雙網卡
添加網卡技能,GET~
eth0: inet 172.25.254.11
eth1: inet 172.25.88.100
真機 172.25.88.250
systemctl start httpd
systemctl stop firewalld
檢測
客戶端:172.25.88.10
在配置以前,客戶端是不能訪問真機的主頁的。
配置以後,在瀏覽器,經過代理訪問172.25.254.88(別忘記寫端口號~3128),但仍是ping不通
正向代理和反向代理區別
正向代理:不須要知道,要訪問哪一個網站,客戶端須要做配置
反向代理,明確的告訴上級要去拿什麼,客戶端不須要配置代理
交叉存儲...
CDN加速
真機apache 172.25.88.250
服務器 172.25.88.100
56 http_access allow all
59 http_port 80 vhost vport
60 cache_peer 172.25.254.88 parent 80 0 no-query 沒有鄰居
63 cache_dir ufs /var/spool/squid 100 16 256
less /usr/share/doc/squid-3.3.8/squid.conf.documented
客戶端 172.25.88.10
在客戶端,使用瀏覽器訪問服務器(172.25.88.100),自動跳轉到真機的apache主頁(172.25.88.250)
輪詢
真機 172.25.254.88
cat /var/www/html/index.html
lalalalala,i am 88.250
zhenji
虛擬機 172.25.88.251
cat /var/www/html/index.html
lalalalala,i am 88.251 xuniji
服務器 172.25.
vim /etc/squid/squid.conf
56 http_access allow all
59 http_port 80 vhost vport
60 cache_peer 172.25.254.88 parent 80 0no-query originserver round-robin name=web1
61 cache_peer 172.25.88.251 parent 80 0no-query originserver round-robin name=web2
62 cache_peer_domain web1 web2www.miximixi.com
65 cache_dir ufs /var/spool/squid 100 16 256
客戶端 172.25.88.
vim /etc/hosts
172.25.88.100(server ip) www.miximixi.com
檢驗
在客戶端瀏覽器中訪問www.miximixi.com
由於絕對路徑執行shell,使用的是腳本文件中第一行#!指定的shell來執行命令(#!/usr/bin/env tcsh)
而 sh 1.sh 則是使用sh默認的bash執行腳本,因此使用過濾命令,沒有效果~
~.bash_profile 和/etc/profile :
當~.bash_profile中內容存在時,先讀~.bash_profile,不然讀取/etc/bash_profile
情景1:將ls由/bin/ls移動成爲/root/ls
那麼無論在哪一個目錄下輸入任何與ls相關的命令,都沒法執行ls
由於/root這個目錄並不在PATH指定的目錄中,因此,即便在/root目錄下,也不能執行ls!
只能過絕對目錄或相對目錄來執行
解決方法:將/root加入PATH變量,就能夠在"任何目錄下"執行ls 了
注意:
1.本目錄(.)最好不要放到PATH當中。
2.使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確。
3.直接運行腳本和使用source命令運行腳本是不一樣的!
4)計算數值
I)echo $[1+2] echo $[2*2] echo$[2**3] echo $[2%3]
II)echo `expr 1 + 2`
III)let a=1+2 echo $a
IV)((a=3+2)) ((a++))
V)echo 2^3 |bc
腳本調試模式:
#!/bin/bash -x
# bash -x scripts
shel 腳本舉例
II)&&後,條件爲真執行動做,||後,條件爲假執行動做
1 #!/bin/bash
2 for n in {80..90}
3 do
4 ping -c1 -w1 172.25.254.$n &> /dev/null && echo172.25.254.$n is up || echo 172.25.254.$n is down
5
6 done
2)shell參數爲指定ip
I)判斷檢測(test)
[ -z $a ] STRING zore
[ -n $a ] STRING nozore
[ -e $a ] file exist
[ file –ef file1 ] 比較兩文件inode是否相等(是否互爲硬連接)
[ file –ot file1 ] 比較file是否比file1 新
[ file –nt file1 ] 比較file是否比file1 老
1#!/bin/bash
2 [ -n "$*" ] && (
3 ping -c1 -w1 $* &>/dev/null&& echo $* is up || echo $* is down
4 )||(
5 echo please give me a ip addressfirst #錯誤提示
6 )
II)
3、倒計時
1.10s
1 #!/bin/bash
2 for ((SEC=10;SEC>=0;SEC--))
3 do
4 echo -n "After ${SEC}s is end "
5 echo -ne "\r"
6 sleep 1 使程序休眠1s,以後再執行
7 done
2.1m10s
1 #!/bin/bash
2 for ((MIN=5,SEC=10;SEC>=0;SEC--))
3 do
4
5 echo -n "After ${MIN}m ${SEC}s is end "
6 echo -ne "\r"
7 sleep 1
8
9 while [ "$MIN" -gt"0" -a "$SEC" -le "0" ]; 秒數減完,分鐘數大於1時
10 do
11 ((MIN--))
12 SEC=60
13 done
14
15 done
3.1h1m5s
1#!/bin/bash
2 for ((HOUR=1,MIN=1,SEC=5;SEC>=0;SEC--))
3 do
4
5 echo -n "After ${HOUR}h ${MIN}m ${SEC}s is end"
6 echo -ne "\r"
7 sleep 1
8
9 while [ "$MIN" -gt"0" -a "$SEC" -le "0" ];
10 do
11 ((MIN--))
12 SEC=60
13 done
14
15 while [ "$MIN" -le"0" -a "$SEC" -le "0" -a "$HOUR"-gt "0" ];
16 do
17 ((HOUR--))
18 MIN=59
19 SEC=60
20 done
21
22 done
注意:
I)echo 默認會在結尾輸出一個換行符
echo -n: do not output the trailing newline 不輸出結尾的換行符
II)echo 默認開啓 -E,默認不識別,轉移字符(反斜槓)
echo -E disable interpretation ofbackslash escapes (default)
echo -e enable interpretation ofbackslash escapes 啓用反斜槓轉義的解釋
III) echo -e "\其餘參數"
\r 光標移至行首,但不換行(常做覆蓋輸出)
\f 換行但光標仍舊停留在原來的位置
\n 換行且光標移至行首
\a 滴滴~
\b 刪除前一個字符 backspace
IV)爲何要用,兩個\r???
5、判斷一個數是否是在0~10
1#!/bin/bash
2 read -p "Please input a num: " NUM 外部傳參
3 [ "$NUM" -ge "0" -a"$NUM" -le "10" ] && echo $NUM is in the range ||
4 (echo $NUM is out of the range)
6、檢測文件類型 []
1 #!/bin/bash
2 if [ -e "$1" ]
3 then
4 [ -b "$1" ] && echoblockfile
5 [ -c "$1" ] && echoc block
6 [ -d "$1" ] && echodirectory
7 [ -f"$1" -a ! -L "$1" ] && echo regular-file
8 [ -L "$1" ] && echolink-file
9 else echo please input filename
10 fi
7、 useradd password username
request 1.no file
2.filelines diff
3.userexist
編寫shell時,注意首先編寫的是腳本主體,錯誤檢測在最後寫
1#!/bin/bash
2 if [ -n "$1" -a -n "$2" ] #判斷參數是否爲空
3 then
4 if [ -e $1 -a -e$2 ] #判斷文件是否存在
5 then
6
7 USERLINE=`cat $1 | wc -l`
8 PASSLINE=`cat $2 | wc -l`
9
10 [ $USERLINE -eq $PASSLINE ] &&
#判斷兩個文件行數是否相等
11 (
12
13 for i in `seq $USERLINE`
14 do
15
16 #提取第i行的用戶名# USERNAME=`sed -n ${i}p$1`
17 #提取第i行的密碼# PASSWORD=`sed -n ${i}p$2`
18#檢測用戶是否存在,不用id,由於id看不到隱藏用戶
CKUSER=`getent passwd$USERNAME`
19#若是用戶不存在,才建立# [ -z "$CKUSER"] &&
20 (
21 useradd $USERNAME
22 echo $PASSWORD |passwd --stdin $USERNAME
23 )||echo "$USERNAME isexist"
24 done
25 )||echo "$1 and $2 have different lines"
26 elif [ ! -e $1 ]
27 then
28 echo "ERORR: $1 is notexit"
29 else
30 echo "ERORR: $2 is notexit"
31 fi
32 else
33 echo "ERROR : Pleaseinput userfile and password file after command!!!"
34 fi
8、case
1 #!/bin/bash
2 case $1 in
3 apple) echo banana
4 ;;
5 banana) echo apple
6 ;;
7 *)
8 echo error!
9 ;;
10 esac
9、expect
yum install expect -y
which expect
/usr/bin/expect
1)簡單小程序
1.普通版
vim ask.sh
1 #!/bin/bash
2 read -p "what is your name:" NAME
3 read -p "how old are you: "AGE
4 read -p "what is your class:" CLASS
5 read -p "are you happy : "FEEL
6 echo $NAME is $AGE\'s old $NAME is$CLASS student and $FEEL
vim anser.exp
1 #!/usr/bin/expect
2 spawn /mnt/shell/ask.sh監控文件的執行
3 expect "name"
4 send "cd\r"
5 expect "old"
6 send "80\r"
7 expect "class"
8 send "biansha\r"
9 expect "happy"
10 send "unhappy\r"
11 expect eof
12
2.進階版(在命令行中輸入回答)
1 #!/usr/bin/expect
2 set name [ lindex $argv 0 ]
3 set age [ lindex $argv 1 ]
4 set class [ lindex $argv 2 ]
5 set feel [ lindex $argv 3 ]
6
7
8
9 spawn /mnt/shell/ask.sh
10 expect "name"
11 send "$name\r"
12 expect "old"
13 send "$age\r"
14 expect "class"
15 send "$class\r"
16 expect "happy"
17 send "$feel\r"
18 expect eof
\r return 回車
2)ssh
1 #!/usr/bin/expect
2 set IP [ lindex $argv 0 ]
3 set PASS [ lindex $argv 1 ]
4 spawn ssh root@$IP
5 expect {
6 "yes/no"
7 { send "yes\r";exp_continue}
8 "password"
9 { send "$PASS\r"}
10 }
11 interact #停留在ssh的環境
十)檢測1-10,是否開機,若是開機,顯示主機名
做業
檢測全班有多少臺主機是開機的,在開機的主機上批量創建用戶,更改用戶的密碼。
只實現了創建一個用戶..