<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定認證的目錄 AllowOverride AuthConfig //這個至關於打開認證的開關 AuthName "123.com user auth" //自定義認證的名字,做用不大 AuthType Basic //認證的類型,通常爲Basic,其餘類型阿銘沒用過 AuthUserFile /data/.htpasswd //指定密碼文件所在位置 require valid-user //指定須要認證的用戶爲所有可用用戶 </Directory> </VirtualHost>
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd amingphp
從新加載配置-t , gracefulhtml
綁定hosts,瀏覽器測試mysql
curl -x127.0.0.1:80 www.123.com //狀態碼爲401sql
curl -x127.0.0.1:80 -uaming:passwd www.123.com //狀態碼爲200apache
還能夠針對單個文件進行認證 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php> AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch>vim
</VirtualHost> ## httpd的用戶認證 - 瀏覽器在打開一個網站,什麼頁面都不現實,只彈出一個對話框,讓你輸入用戶名和密碼,只有輸入正確才能訪問網站的內容 - 需求 - abc.com這個網站訪問的時候,不能直接訪問,必須輸入用戶名和密碼,驗證經過以後才能訪問網站內容——>這樣作的目的是增長安全性,可是劣勢是用戶體驗不好,由於每一個人用訪問網站都必須輸入用戶名和密碼 1. 編輯vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 文件 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf瀏覽器
在文件中編輯配置文件,將如下內容添加到第二段代碼中——>由於第一個虛擬主機是默認虛擬主機 <Directory /data/wwwroot/www.111.com> //指定認證的目錄 AllowOverride AuthConfig //這個至關於打開認證的開關,若是沒有這一行,那就至關於沒有開啓 AuthName "111.com user auth" //自定義認證的名字,做用不大 AuthType Basic //認證的類型,通常爲Basic,其餘類型幾乎沒用過 AuthUserFile /data/.htpasswd //指定密碼文件所在位置——>這裏須要指定一個用戶名的密碼文件 require valid-user //指定須要認證的用戶爲所有可用用戶 </Directory>安全
更改完的代碼 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>ssh
<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com
<Directory /data/wwwroot/111.com> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd
require valid-user </Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost>curl
而後保存退出
2. 用apache自帶的命令htpasswd建立 - /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd hanfeng - -c參數,就是建立 -m參數,使用MD5加密 - /data/.htpasswd,指定密碼文件所在位置 - useradd hanfeng,(這裏的useradd 是不須要寫的,直接寫用戶名就行)加一個用戶名(密碼爲hanfeng)
[root@hf-01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd hanfeng New password: Re-type new password: Adding password for user hanfeng [root@hf-01 ~]#
- 如果提示錯誤,那麼先查看文件是否生成,而後查看文件內容,再去排查其餘錯誤 3. 查看 /data/.htpasswd 文件內容 - 能看到文件中有一行,以 : 冒號爲分割。左邊是用戶名,右邊是MD5加密的密碼 - 由於是用 -m 指定了加密的類型
[root@hf-01 ~]# cat /data/.htpasswd hanfeng:$apr1$DAYH22/X$YbawXM95jlmckPykpfn3u/ [root@hf-01 ~]#
4. 再增長zhangsan用戶,就不須要去 -c參數 建立了,由於已經建立過了(密碼爲123456)
[root@hf-01 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan New password: Re-type new password: Adding password for user zhangsan [root@hf-01 ~]#
5. 查看文件內容,會發現又增長了一行密碼
[root@hf-01 ~]# cat /data/.htpasswd hanfeng:$apr1$DAYH22/X$YbawXM95jlmckPykpfn3u/ zhangsan:$apr1$NC7LZ5JQ$FBZNAIzjCTwKheTiWrtlT. [root@hf-01 ~]#
6. 查看配置文件是否有錯誤,並從新加載配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]#
7. 測試,訪問111.com的時候,會提示401狀態碼 - 401狀態碼,說明訪問的內容須要作用戶認證
[root@hf-01 ~]# curl -x127.0.0.1:80 111.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head> <title>401 Unauthorized</title> </head><body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html> [root@hf-01 ~]# curl -x127.0.0.1:80 111.com -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 15:34:22 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1
[root@hf-01 ~]#
8. 一樣能夠在瀏覽器中輸入111.com——>前提是要先在物理機中hosts文件定義111.com
192.168.202.130 www.abc.com www.123.com 111.com
9. 會發現須要輸入用戶名,和密碼 ![輸入圖片說明](https://static.oschina.net/uploads/img/201712/20154417_RfRv.jpg "瀏覽器訪問111.com,會提示輸入密碼") 10. 在輸入用戶名和密碼 ![輸入圖片說明](https://static.oschina.net/uploads/img/201712/20155044_Duav.jpg "輸入驗證碼和密碼") 11. 會發現正常訪問到頁面了 ![輸入圖片說明](https://static.oschina.net/uploads/img/201712/20155247_rti9.jpg "正常訪問到頁面內容") 12. 這個就是用戶認證 ### curl輸入用戶名和密碼 - curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com -I - -u參數,而後加用戶名,再:冒號密碼
[root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 15:57:06 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8
[root@hf-01 ~]#
- 這時會發現狀態碼改變了,狀態碼變成了200(200即爲正常) - 如果輸錯密碼,那麼狀態碼又會變成401
[root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:feng 111.com -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 15:59:16 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1
[root@hf-01 ~]#
## 針對某一個訪問的進行認證 - 針對 admin.php文件 只有打開這個文件纔會執行下面的操做
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php>
AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> </VirtualHost>
- 這裏和前面的用戶認證惟一不一樣的就是,使用的是 FilesMatch ,當訪問的文件匹配到admin.php的時候,它纔去執行如下的配置,而前面的用戶認證使用的Directory,指定了一個目錄,只要是這個目錄下面的都會去認證,這裏是FilesMatch ,匹配文件的 1. 更改配置文件,註釋掉Directory,去使用FilesMatch - vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
未更改前 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>
<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com <Directory /data/wwwroot/111.com> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost>
更改後 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>
<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com
<FilesMatch 123.php> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> #</Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common
</VirtualHost>
並保存退出
2. 檢查配置文件是否存在語法錯誤,並從新加載配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]#
3. 編輯123.php文件
[root@hf-01 ~]# vim /data/wwwroot/111.com/123.php
在配置文件中寫入
<?php echo "123.php"; 並保存退出 ``` 4. 檢查是否能訪問網站,這裏會看到不加-u 也能訪問到網站,狀態碼也是200,而不是401了 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:feng 111.com 111.com[root@hf-01 ~]# [root@hf-01 ~]# curl -x127.0.0.1:80 111.com 111.com[root@hf-01 ~]# [root@hf-01 ~]# curl -x127.0.0.1:80 111.com -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 16:24:13 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8 [root@hf-01 ~]# ``` 5. 可是在訪問123.php的時候,會提示401,這是由於針對123.php作了一個限制 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 111.com/123.php -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 16:25:42 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1 [root@hf-01 ~]# ``` 6. 這時候-u指定用戶名和密碼,就能夠訪問123.php了 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com/123.php -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 16:27:11 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8 [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com/123.php 123.php[root@hf-01 ~]# ``` # 11.19/11.20 域名跳轉 ## 域名跳轉概要目錄 - 需求,把123.com域名跳轉到www.123.com,配置以下: ``` <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com ServerAlias 123.com <IfModule mod_rewrite.c> //須要mod_rewrite模塊支持 RewriteEngine on //打開rewrite功能 RewriteCond %{HTTP_HOST} !^www.123.com$ //定義rewrite的條件,主機名(域名)不是www.123.com知足條件 RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定義rewrite規則,當知足上面的條件時,這條規則纔會執行 </IfModule> </VirtualHost> ``` - /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若無該模塊,須要編輯配置文件httpd.conf,刪除rewrite_module (shared) 前面的# - curl -x127.0.0.1:80 -I 123.com //狀態碼爲301 ## 域名跳轉 - 域名跳轉,經常使用於 老域名跳轉到新域名,由於老用戶已經習慣記住一個域名了,忽然頁面換到了新的域名,就須要作這個操做。一個域名就是一個網站的名稱,均可以經過域名訪問到該網站 - 由於域名涉及到一個SEO,SEO會對網站的內容進行一個價值權重定義,舊網站價值高,會一直存在各大搜索引擎,會對新網站產生不可預料的影響,因此爲了讓老用戶,和搜索引擎把重心轉移到新網站,因此就須要作一個老域名跳轉到新域名的操做。 - SEO涉及到一個排名,網站的排名越高,在搜索引擎排名就越靠前,而這個權重是根據網站的頁面數量來斷定的,搜索引擎認爲該網站比較有價值,就會提高該網站權重,而它判斷網站是根據域名來的,在搜索引擎眼裏,一個網站是根據域名來判斷的。 - 若一個網站同時有A、B兩個域名能夠同時訪問,那搜索引擎會認爲第二個B域名是一個冒牌貨,因此搜索引擎會把高權重給第一個A域名,低權重給第二個B域名。 - 而爲了解決這種問題,把一個網站A域名跳轉到另外一個網站B域名上,提高跳轉到的那個域名的權重,而且定義一個301的狀態碼——>301狀態碼叫作,永久重定向,永久跳轉。 - 永久跳轉,搜索引擎它認爲A網站不用了,就能夠把A網站的權重降下去,而後把全部權重加到B網站上去,這就是301狀態碼的做用。 ## 域名跳轉配置文件介紹 - 加入到配置文件的內容 ``` <IfModule mod_rewrite.c> //須要mod_rewrite模塊支持 RewriteEngine on //打開rewrite功能,on就是打開 RewriteCond %{HTTP_HOST} !^111.com$ //定義rewrite的條件,主機名(域名)不是111.com知足條件。 RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定義rewrite規則,當知足上面的條件時,這條規則纔會執行 </IfModule> ``` 1. mod_rewrite模塊,在編譯apache的時候用到了一個most,most會把大多數模塊編譯進來;若是沒有用most,沒有加任何的編譯參數,那mod_rewrite模塊也不會出現 2. 定義rewrite的條件,主機名(域名)不是111.com知足條件。當域名不是111.com的時候,就會跳轉到111.com,也就是說如今以111.com爲主域名,它的權重大一點。若是不是 ! 歎號,表示取反的意思。HOST就是定義的域名,111.com就是HOST。!^111.com$,表示以111開頭的,到com結尾的,這樣定義是爲了包含111.com也會匹配 3. 這個^/(.*)$ 理解爲: 非域名之外剩下的部分, / 斜槓表示域名後面的斜槓,(.*)就是 / 斜槓後的全部, $表示結束語句 - 凡是以 ^/(.*)$ 域名的 都會跳轉到 http://111.com/(.*) - 例如:^/(.*)/([1-9]+)$ 跳轉就能夠寫成 http://111.com/$1/$2 - 這個 R=301,L 在跳轉完成後還須要加一個R=301狀態碼,L 表示只跳轉一次結束 - 301是永久重定向 - 302是臨時重定向,臨時重定向在搜索引擎不太友好,它會認爲僅僅是臨時的,不過把原來域名的權重下降 ### 域名重定向實驗操做 1. 打開虛擬主機配置文件,並修改配置文件 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 更改前 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com #<Directory /data/wwwroot/111.com> <FilesMatch 123.php> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> #</Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost> 更改後 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com #<Directory /data/wwwroot/111.com> #<FilesMatch 123.php> # AllowOverride AuthConfig # AuthName "111.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </FilesMatch> #</Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^111.com$ RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost> 而後保存退出 ``` 2. 檢測修改的配置文件是否存在語法錯誤 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK ``` 3. 從新加載配置文件 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]# ``` 4. 在測試前,先檢查是否加載了rewrite模塊 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite [root@hf-01 ~]# ``` 5. 這裏會看到並無加載rewrite模塊,因此還須要到配置文件中打開rewrite模塊 6. 若是沒有加載,還須要打開rewrite模塊,由於在編譯的時候指定了most,因此rewrite模塊必定存在 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf 搜索/rewrite ,找到這一行,並將前面的# 號去掉 LoadModule rewrite_module modules/mod_rewrite.so 而後保存退出 ``` 7. 檢測修改的配置文件是否存在語法錯誤,並從新加載配置文件 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]# ``` 8. 再來查看rewrite模塊 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite rewrite_module (shared) [root@hf-01 ~]# ``` 9. 查看虛擬主機配置文件 ``` [root@hf-01 ~]# cat /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ``` 10. 開始測試 - curl -x可使用127.0.0.1也能夠是192.168.133.130 進行測試,由於80端口監聽的是全網 什麼是監聽全網 - 全網,就是這臺主機上全部的網卡的IP - 80端口默認是:::80,表示監聽全網 ``` [root@hf-01 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1525/master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1199/sshd tcp6 0 0 ::1:25 :::* LISTEN 1525/master tcp6 0 0 :::3306 :::* LISTEN 1513/mysqld tcp6 0 0 :::80 :::* LISTEN 2586/httpd tcp6 0 0 :::22 :::* LISTEN 1199/sshd [root@hf-01 ~]# ``` 11. 在虛擬主機中添加2111.com.cn ,而後在從新檢查語法錯誤,在加載配置文件 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful ``` 12. 訪問2111.com.cn - curl -x192.168.74.150:80 2111.com.cn -I - -I參數,表示不顯示內容,只看狀態碼 ``` [root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn -I HTTP/1.1 301 Moved Permanently Date: Wed, 20 Dec 2017 23:32:32 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Location: http://111.com/ Content-Type: text/html; charset=iso-8859-1 [root@hf-01 ~]# ``` 13. 會看到狀態碼爲301 14. 查看2111.com.cn網站的內容 ``` [root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://111.com/">here</a>.</p> </body></html> [root@hf-01 ~]# ``` 15. 在域名後面隨便添加字符,最後仍是跳轉到111.com ``` [root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn/saasfagssd -I HTTP/1.1 301 Moved Permanently Date: Wed, 20 Dec 2017 23:39:50 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Location: http://111.com/saasfagssd Content-Type: text/html; charset=iso-8859-1 [root@hf-01 ~]# ``` 16. 去訪問隨便輸入字符的網站,會顯示404狀態碼 - 404狀態碼,表示這個頁面不存在 - 401狀態碼,表示用戶名密碼驗證的。若是驗證不對,就是401狀態碼;驗證對了,就是200狀態碼 ``` [root@hf-01 ~]# curl -x192.168.74.150:80 http://111.com/saasfagssd -I HTTP/1.1 404 Not Found Date: Wed, 20 Dec 2017 23:42:08 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1 [root@hf-01 ~]# ``` # 11.21 Apache訪問日誌 ## 訪問日誌目錄概要 - 訪問日誌記錄用戶的每個請求 - vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat ``` LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ``` - 把虛擬主機配置文件改爲以下: ``` <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com ServerAlias 123.com CustomLog "logs/123.com-access_log" combined </VirtualHost> ``` - 從新加載配置文件 -t,graceful - curl -x127.0.0.1:80 -I 123.com - tail /usr/local/apache2.4/logs/123.com-access_log ## 訪問日誌 - 訪問日誌,就是在瀏覽器中輸入網址,每一次訪問,每一次請求,都會生成一個日誌 - 查看apache2.4的日誌 ``` [root@hf-01 ~]# ls /usr/local/apache2.4/logs/ 111.com-access_log abc.com-access_log access_log httpd.pid 111.com-error_log abc.com-error_log error_log [root@hf-01 ~]# ``` - 查看111.com訪問日誌 - 日誌裏面的HEAD都是curl命令致使的 - 日誌裏面的GET就是不加 -I參數的,在加上-I只會輸出狀態碼,並不會把內容GET下來 - 日誌裏面包含 來源的IP,時間 , 行爲 ,訪問的域名 , HTTP的版本1.1 ,狀態碼 , 大小 ``` [root@hf-01 ~]# ls /usr/local/apache2.4/logs/111.com-access_log /usr/local/apache2.4/logs/111.com-access_log [root@hf-01 ~]# cat !$ cat /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - - [20/Dec/2017:23:29:53 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 - 127.0.0.1 - - [20/Dec/2017:23:34:22 +0800] "HEAD HTTP://111.com HTTP/1.1" 401 - 127.0.0.1 - - [20/Dec/2017:23:36:57 +0800] "GET HTTP://111.com HTTP/1.1" 401 381 192.168.202.1 - - [20/Dec/2017:23:42:35 +0800] "GET /favicon.ico HTTP/1.1" 401 381 192.168.202.1 - - [20/Dec/2017:23:42:35 +0800] "GET / HTTP/1.1" 401 381 192.168.202.1 - - [20/Dec/2017:23:42:52 +0800] "GET / HTTP/1.1" 401 381 192.168.202.1 - - [20/Dec/2017:23:48:41 +0800] "GET / HTTP/1.1" 401 381 192.168.202.1 - hanfeng [20/Dec/2017:23:49:04 +0800] "GET / HTTP/1.1" 200 7 127.0.0.1 - hanfeng [20/Dec/2017:23:57:06 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 - 127.0.0.1 - hanfeng [20/Dec/2017:23:59:16 +0800] "HEAD HTTP://111.com HTTP/1.1" 401 - 127.0.0.1 - hanfeng [21/Dec/2017:00:19:07 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 - 127.0.0.1 - hanfeng [21/Dec/2017:00:19:21 +0800] "GET HTTP://111.com HTTP/1.1" 200 7 127.0.0.1 - - [21/Dec/2017:00:19:37 +0800] "GET HTTP://111.com HTTP/1.1" 200 7 127.0.0.1 - - [21/Dec/2017:00:19:41 +0800] "GET HTTP://111.com HTTP/1.1" 200 7 127.0.0.1 - - [21/Dec/2017:00:24:13 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 - 127.0.0.1 - - [21/Dec/2017:00:25:42 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 401 - 127.0.0.1 - hanfeng [21/Dec/2017:00:27:11 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 127.0.0.1 - hanfeng [21/Dec/2017:00:27:43 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 155 127.0.0.1 - hanfeng [21/Dec/2017:00:29:05 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - hanfeng [21/Dec/2017:00:52:40 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.130 - - [21/Dec/2017:21:07:37 +0800] "HEAD HTTP://2111.com.cn HTTP/1.1" 301 - [root@hf-01 ~]# ``` ### 定義日誌文件格式 - 上面輸出的日誌太過簡單,不是咱們所須要的日誌格式,日誌其實能夠自定義格式的 1. 打開主配置文件 - 默認使用的是common - %h,來源IP - %l,用戶 - %u,用戶名和密碼 - %t,時間 - %r,行爲和網站 - %>s,網站狀態碼 - %b,頁面大小 - {Referer}i 表示訪問頁面的上一個所訪問的頁面 - %{User-Agent}i 表示用戶代理,是經過瀏覽器訪問,仍是curl命令訪問,最終得到網站的內容,瀏覽器就是用戶代理 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf ——>不更改信息 搜索 /LogFormat ,看到的就是文件格式,這裏提供了兩個文件的格式,默認使用的是common LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ``` 2. 打開虛擬機配置文件 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 未更改前 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com 2111.com.cn # <Directory /data/wwwroot/111.com> # <FilesMatch 123.php> # AllowOverride AuthConfig # AuthName "111.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </FilesMatch> #</Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^111.com$ RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost> 更改後,將common 改成 combined <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com 2111.com.cn # <Directory /data/wwwroot/111.com> # <FilesMatch 123.php> # AllowOverride AuthConfig # AuthName "111.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </FilesMatch> #</Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^111.com$ RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" combined </VirtualHost> ``` 3. 檢查配置文件是否存在語法錯誤,並重啓配置文件 ``` [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]# ``` 4. 使用curl命令訪問網址 ``` [root@hf-01 ~]# curl -x192.168.202.150:80 http://111.com123.php -I HTTP/1.1 200 OK Date: Thu, 21 Dec 2017 13:50:10 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8 [root@hf-01 ~]# ``` 5. 再用瀏覽器訪問下網址 ![輸入圖片說明](https://static.oschina.net/uploads/img/201712/21135305_UQVA.jpg "瀏覽器訪問網址") 6. 查看日誌文件 - 會看到日誌文件豐富了 ``` [root@hf-01 ~]# tail !$ tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - - [21/Dec/2017:00:24:13 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 - 127.0.0.1 - - [21/Dec/2017:00:25:42 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 401 - 127.0.0.1 - hanfeng [21/Dec/2017:00:27:11 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 127.0.0.1 - hanfeng [21/Dec/2017:00:27:43 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 155 127.0.0.1 - hanfeng [21/Dec/2017:00:29:05 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - hanfeng [21/Dec/2017:00:52:40 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.130 - - [21/Dec/2017:21:07:37 +0800] "HEAD HTTP://2111.com.cn HTTP/1.1" 301 - 192.168.202.130 - - [21/Dec/2017:21:51:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.1 - - [21/Dec/2017:21:51:32 +0800] "GET /123.php HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" 192.168.202.130 - - [21/Dec/2017:21:55:08 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" [root@hf-01 ~]# ``` 7. 測試{Referer}i ,在論壇新建一個筆記,[測試網址](http://ask.apelearn.com/question/17687),加入本身的測試連接,並在日誌中打開本身的測試連接 8. 再來查看日誌文件,會看到生成了{Referer}i ``` [root@hf-01 ~]# tail -5 /usr/local/apache2.4/logs/111.com-access_log 192.168.202.130 - - [21/Dec/2017:21:07:37 +0800] "HEAD HTTP://2111.com.cn HTTP/1.1" 301 - 192.168.202.130 - - [21/Dec/2017:21:51:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.1 - - [21/Dec/2017:21:51:32 +0800] "GET /123.php HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" 192.168.202.130 - - [21/Dec/2017:21:55:08 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.1 - - [21/Dec/2017:22:04:27 +0800] "GET /123.php HTTP/1.1" 200 7 "http://ask.apelearn.com/question/17687" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" [root@hf-01 ~]# ``` # 擴展 - [apache虛擬主機開啓php的短標籤](http://ask.apelearn.com/question/5370 )