2018.3.2 10周3次課
11.18 Apache用戶認證 11.19/11.20 域名跳轉 11.21 Apache訪問日誌
11.18 Apache用戶認證
這個功能就是在用戶訪問網站的時候,需要輸人用戶名密碼才能順利訪問。一些比較重要的站點或者網站後臺通常會加上用戶認證,目的是保證安全。
先對123.com站點做一個安全的用戶認證 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那個虛擬主機編輯成如下內容
<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 //認證的類型,一般為Basic,其他類型阿銘沒用過
AuthUserFile /data/.htpasswd //指定密碼文件所在位置
require valid-user //指定需要認證的用戶為全部可用用戶
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
創建密碼文件:
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
htpasswd命令為創建用戶的工具,-c為create(創建),-m指定密碼加密方式為MD5,
/data/.htpasswd為密碼文件,aming為要創建的用戶。第一次執行該命令需要加-c。第二次再創建新的用戶時,就不用加了-c,否則/data/.htpasswq文件會被重置,之前的用戶被清空
重新加載配置-t , graceful
綁定hosts,瀏覽器測試
配置完成後,需要到宿主機(你的真實電腦Windows)上去修改一下hosts文件,類似Linux上的 etc/hosts,把111.com域名指向你的這臺Linux機器,這樣才能通過瀏覽器訪問到111.com。 Windows上的hosts文件所在路徑為C:\Windows\System32\dnvers\etc\hosts:
192.168.37.101 111.com
curl -x127.0.0.1:80 111.com //狀態碼為401,說明訪問的內容需要用戶認證
curl -x127.0.0.1:80 111.com –I //查看狀態碼信息
curl -x127.0.0.1:80 -uaming:123456 111.com //狀態碼為200,-u是輸入用戶名,:是輸入密碼
還可以針對單個文件進行認證
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那個虛擬主機編輯成如下內容
<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>
vim /data/wwwroot/111.com/123.php
直接訪問不需要輸入用戶名和密碼,狀態碼是200
訪問123.php時狀態碼出現401 //我們對123.php做了限制。要指定用戶名和密碼。
11.19/11.20 域名跳轉
用www.lishiming.net訪問的時候,瀏覽器裏面的網址直接變成了ask.apelearn.com這其實就是域名的跳轉過程。做域名跳轉有什麽用呢?主要有兩方面的作用:
第一 ,一個站點有多個域名會對SEO有影響,說白了就是百度搜索關鍵詞的排名有影響,如果把多個域名全部跳轉到指定的一個域名,這樣以這個域名為中心,就可以把權重集中在這個域名上,所以搜索關鍵詞的排名也就靠前了;
第二,如果之前的某個域名不再使用了,但是搜索引擎還留著之前老域名的鏈接,這意味著用戶可能會搜到我們的網站並且點擊老的域名,固需要把老域名做個跳轉跳到新域名,這樣用戶搜的時候,也可以訪問到網站。
需求,把123.com域名跳轉到www.123.com,配置如下:
<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> //需要mod_rewrite模塊支持
RewriteEngine on //打開rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$ //定義rewrite的條件,主機名(域名)不是111.com滿足條件
RewriteRule ^/(.*)$ http://111.com/$1 //定義rewrite規則,當滿足上面的條件時,這條規則才會執行
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
在RewriteRule裏是有正則表達式存在的,RewriteRu1e後面由空格劃分成三部分,第一部分為當前的URL(也就是網址),不過這個URL是不把主機頭(也就是域名)算在內的。第二部分為要跳轉的目標地址,這個地址可以寫全(包含了主機頭),當然也可以不加主機頭,默認就是前面定義的ServerName。第三部分為一些選項,需要用方括號括起來,301為狀態碼,它稱作“永久重定向"(還有一種跳轉用的狀態碼為302,叫作“臨時重定向"),L表示"last",意思是跳轉一次就結束了。
以111.com/123.php為例:
^/表示不是111.com開頭,(.*)表示是123.php ,跳轉到http://111.com/,$1就是前面第一個(.*)這部分。每個()代表著一個整體, $1對應第一個小括號,$2對應第二個小括號
檢測和加載配置:
要實現域名跳轉,需要有rewrite模塊支持,所以先查看httpd是否已經加載該模塊,如果沒有還需要配置:
沒有任何輸出,說明沒有加載該模塊
加載rewrite模塊
vi /usr/local/apache2.4/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so //去掉行首的#
測試
查看狀態碼:301
查看內容
11.21 Apache訪問日誌
訪問日誌作用很大,不僅可以記錄網站的訪問情況,還可以在網站有異常發生時幫助我們定位問題,比如當有攻擊時,是可以通過查看日誌看到一些規律的。要配置httpd訪問日誌,首先要在主配置文件中定義訪問日誌的格式,可以看到兩個格式的日誌,建議使用第一個,記錄的信息會更全。
訪問日誌記錄用戶的每一個請求
日誌位置:ls /usr/local/apache2.4/logs/
查看實驗機的日誌內容:cat /usr/local/apache2.4/logs/111.com-access_log
打開主配置文件:vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat,默認用的是common
%h為訪問網站的IP;
%l為遠程登錄名,這個字段基本上為“ -" ;
%u為用戶名,當使用用戶認證時,這個字段為認證的用戶名 ;
%t為時間 ;
%r為請求的動作( 比如用curl -I時就為HEADE );
%s為請求的狀態碼,寫成%>s為最後的狀態碼;
%b 為傳輸數據大小;
%{Referer)i為referer信息(請求本次地址上一次的地址就為referer,比如在百度中搜索阿銘Linux,然後通過百度的搜索結果頁面點擊然後到了阿銘的論壇,那訪問阿銘論壇的這次請求的referer就是baidu,當然那個地址肯定是很長的);
%{User-Agent}i為瀏覽器標識,比如你用 Firefox或者Chrome瀏覽器,則該字段顯示內容不一樣,是帶有瀏覽器的標識的。
對於這個日誌格式,你可以自定義調整各個字段的位置,也可以額外增加其他字段,比如可以增加%D(請求耗費時間)。在工作中並沒有更改過它,默認的日誌格式就夠用
編輯虛擬主機配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
CustomLog "logs/111.com-access_log" combined //common更改為combined
查看日誌文件:cat /usr/local/apache2.4/logs/111.com-access_log
2018.3.2 10周3次課