1. 程式人生 > >2018.3.2 10周3次課

2018.3.2 10周3次課

Linux學習

十周三次課(3月2日)

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次課