1. 程式人生 > >Linux學習總結(三十四)lamp之用戶認證和域名跳轉

Linux學習總結(三十四)lamp之用戶認證和域名跳轉

lamp 用戶認證 域名跳轉 訪問日誌

用戶認證

為了某些網站的安全需要,特意授權特定用戶訪問,因此產生了網站訪問的用戶認證機制。我們可以針對某個站點進行認證,也可以指定某個目錄,或者是一個文件。編輯虛擬主機配置文件:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那個虛擬主機編輯成如下內容

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 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 lv //指定用戶,創建密碼。
重新加載配置-t , graceful
綁定hosts,瀏覽器測試
curl -x127.0.0.1:80 123.com //狀態碼為401
curl -x127.0.0.1:80 -lv:lvlinux 123.com //狀態碼為200
如果要針對一個目錄做認證,比如要對www.123.com/admin/目錄做認證,只需要修改一個地方就可以。把<Directory /data/wwwroot/www.123.com>改為<Directory /data/wwwroot/www.123.com/admin/>. 如果要針對某個文件做認證,則要使用filematch功能,具體配置如下。

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
    <FilesMatch admin.php>
        AllowOverride AuthConfig
        AuthName "123.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd 
        require valid-user
    </FilesMatch>
</VirtualHost>

域名跳轉

我們知道我們在百度這種搜索引擎上訪問某個域名,都會被爬蟲記錄,某個域名的訪問量越大,越容易被搜索。比如有一個網站最開始註冊的域名是A,後來我們又重新起了個比較好的域名B,要讓B域名訪問到該網站,我們只需要簡單的給A域名做一個域名別名B就可以,但是這樣爬蟲記錄的會是兩個域名,因此我們的訪問量被兩個域名分攤了,那麽我們如何在爬蟲眼裏增加我們A域名的權重呢?那就需要將B域名跳轉到A域名。這樣一來新用戶記住了一個更有價值的域名,我們的訪問量也集中到了一起。域名跳轉也叫域名重定向。
需求,把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> 

上面的rewrite 配置意思是,當使用域名別名訪問過來時,我們自動跳轉到服務器域名。用curl訪問會看到我們定義的狀態碼301,如果用瀏覽器訪問會發現ip將自動跳轉。
/usr/local/apache2/bin/apachectl -M|grep -i rewrite //若無該模塊,需要編輯配置文件httpd.conf,刪除rewrite_module (shared) 前面的#
curl -x127.0.0.1:80 -I 123.com //狀態碼為301

訪問日誌

訪問日誌記錄用戶的每一個請求
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
主配置文件提供了兩種訪問日誌格式讓我們選擇,其中虛擬主機裏面默認的是common, 我們看到combined 格式更豐富一些,他多了referer 和 user-agent,我們將編輯虛擬主機配置文件,將common更改為combined ,重新訪問測試,查看日誌。
把虛擬主機配置文件改成如下:

 <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

Linux學習總結(三十四)lamp之用戶認證和域名跳轉