day43:Apache域名跳轉、用戶驗證及訪問格式

一、apapche用戶驗證:訪問網站時須要輸入用戶名和密碼,驗證經過後才能訪問,增長安全性:好比管理登陸後臺的入口php

一、先針對根目錄(網站)作認證:也就是說訪問網站的時候會提示用戶名和密碼:才能夠訪問:html

1:須要編輯虛擬主機配置文件: /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf    :此時針對第一個虛擬主機作驗證以下:web

[root@localhost_002 111.com]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com      #定義管理員郵箱:
    DocumentRoot "/data/wwwroot/111.com"               #網站根目錄,要與下面驗證時的目錄一致:
    ServerName www.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                            #指定須要認證的用戶爲auth裏定義的所有用戶:
    </Directory>
    #認證結束:
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

2:建立在上述文件(httpd-vhosts.conf)裏定義的密碼文件:以下:    算法

[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/htpasswd -m /data/.htpasswd lisi
New password: 
Re-type new password: 
[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/htpasswd -m /data/.htpasswd zhansan
New password: 
Re-type new password: 
Adding password for user zhansan
[root@localhost_002 111.com]# cat /data/.htpasswd 
lisi:$apr1$Ju.ZWThz$3aMSzII6cDp6xXCNm.a2A/
zhansan:$apr1$r8DvZQBQ$qm208cGSaTYQfP2uaW1Wa0

用到的兩個參數-ccreate,建立:      -mmd5加密:apache

如上圖例,咱們建立了兩個用戶了zhansan和lisi,而且第二次建立用戶則不須要加-c參數了:vim

3:配置完成後測試和從新加載配置文件:   -t        graceful瀏覽器

[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 111.com]# /usr/local/apapche2.4/bin/apachectl graceful

4:測試crul   -x192.168.149.130:80   -I安全

[root@localhost_002 111.com]# curl -x192.168.149.130:80 www.111.com -I
HTTP/1.1 401 Unauthorized
Date: Sun, 26 Aug 2018 16:29:26 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1

由上圖例可知,用戶狀態碼401,說明當前所訪問的內容頁面須要進行驗證:bash

使用用戶和密碼驗證訪問: crul    -x192.168.149.130:80  -uzhansan:nihao123!  www.111.com -I服務器

[root@localhost_002 111.com]# curl -x192.168.149.130:80 -uzhansan:nihao123! www.111.com -I
HTTP/1.1 200 OK
Date: Sun, 26 Aug 2018 16:36:03 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

如上圖例可知,狀態碼爲200 OK,網站能夠正常訪問:

固然,也能夠瀏覽器訪問,不過綁定到物理主機的hosts文件:C:\Windows\System32\drivers\etc\hosts:       IP地址     域名  

註釋:用戶名和密碼輸入正確後既可訪問:

擴展:htpasswd命令,是Apache的web服務器內置工具,用戶建立、更新和存儲用戶名和用戶基本認證的密碼文件:

語法:htpasswd   options  參數

-c:create,建立一個密碼文件:

-m:使用md5算法對密碼進行加密:

-s:使用SHA算法對密碼進行加密:

-p:不對密碼進行加密,即明文密碼:

-D:刪除指定用戶:

二、固然Apapche能夠針對網站作驗證,也能夠對某個網站下的文件作驗證,好比:須要對後臺登陸界面作二次驗證:

 1:編輯虛擬主機配置文件:     /usr/local/apapche2.4/conf/extra/httpd-vhost.conf

[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.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>

註釋:註釋掉"<Directory>......</Directory>"  取消對目錄設定的用戶驗證:

"<FilsMatch>......</FilshMatch>"   對文件設定用戶驗證:

2:檢測重啓服務:        -t           graceful

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl graceful

3:測試:    crul   -x192.168.149.130:80   www.111.com/123.php  -I

[root@localhost_002 ~]# curl -x192.168.149.130:80 www.111.com/ -I
HTTP/1.1 200 OK
[root@localhost_002 ~]# curl -x192.168.149.130:80 www.111.com/123.php -I
HTTP/1.1 401 Unauthorized
Date: Mon, 27 Aug 2018 04:01:06 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1

註釋:此時能夠隨意訪問www.111.com,可是訪問111.com的子目錄時會提示401錯誤,即須要用戶驗證:

使用用戶名和密碼驗證訪問,以下:    狀態碼200 OK

[root@localhost_002 ~]# curl -x192.168.149.130:80 -uzhansan:nihao123! www.111.com/123.php
123.php
[root@localhost_002 ~]# curl -x192.168.149.130:80 -uzhansan:nihao123! www.111.com/123.php -I
HTTP/1.1 200 OK

瀏覽器訪問下也是同樣子:

二、域名跳轉:有時候網站變動,涉及到SEO,權重排名(頁面多),域名變動好,也仍是想訪問原網站,設置域名跳轉,會跳轉到原網站:

域名跳轉的分類:       301       302

301:永久跳轉,是永久重定向,搜索引擎會在抓取新內容時,用重定向後的網址替換舊的網址:

302:暫時的跳轉,搜索引擎會抓取新內容的同時保留舊網址,由於服務器返回的是302,搜索引擎認爲新網址只是暫時的:不會下降權重不友好:

1:域名跳轉配置:         /usr/local/papache2.4/conf/extra/httpd-vhosts.conf

[root@localhost_002 ~]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.example.com www.2111.com
    <IfModule mod_rewrite.c>          
   #新增,須要mod_rewrite模塊支持,在編譯apapche時不選擇的most大多數模塊:則不會列出該模塊:
     RewriteEngine on   
   #開啓rewrite_mod模塊開關:
     RewriteCond %{HTTP_HOST} !^www.111.com$  
   #cond=condition,定義rewrite條件,全部非主機名(域名)是www.111.com知足條件,則跳轉到:
     RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
   #定義rewrite規則,當知足上面規則時,此規則纔會執行:
   </IfModule>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

如上圖例:使用域名跳轉功能,首先是須要mod_rewrite模塊的支持才能夠,其次是打開rewrite_mod模塊開關,而後設定規則跳轉條件以下:

RewrteCond %{HTTP_HOST} !^www.111.com$  表示當域名不是www.111.com(主域名)的時候則跳轉,  "HTTP_HOST"就是定義的域名,       "!"表示取反的意思: "^   $"   表示以www.111.com開頭和結尾的:

RewriteRule   ^/(.*)$  http://www.111.com/$1  [R=301,L]  表示跳轉網站後面的子頁面,如www.exapmle.com/123.php最後要跳轉到www.111.com/123.php,讓後面123.php這一部分保存不變:

#"^/"只表示域名的前面那一部分http://www.111.com/,   "/"則表示com後的那的斜槓:

#(.*)$表示則表示域名後面的那一部分,此處表示123.php,也指後面的$1,   "$1"則是前面括號裏的"(.*)"

#若是域名後有個子目錄,能夠加多個匹配和$,好比^/(.*)([0-9)  http://www.111.com/$1/$2,  $1則對應前面第一個括號,$2對應第二個小括號:

2:測試:    apachectl   -M  查看模塊是否加載;                  而後在主配置文件   httpd.conf裏打開配置文件:

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl -M |grep rewrite
 rewrite_module (shared)
[root@localhost_002 ~]# cat /usr/local/apapche2.4/conf/httpd.conf |grep rewrite
LoadModule rewrite_module modules/mod_rewrite.so

3:測試:   #看到狀態碼爲301,跳轉到www.111.com下:   須要先檢查並從新加載服務:

[root@localhost_002 ~]# curl -x127.0.0.1:80 www.2111.com/ -I    #狀態碼爲301:
HTTP/1.1 301 Moved Permanently
Date: Mon, 27 Aug 2018 06:03:21 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Location: http://www.111.com/
Content-Type: text/html; charset=iso-8859-1
[root@localhost_002 ~]# curl -x127.0.0.1:80 www.2111.com/sdfsdf -I   #子頁面狀態碼也是301:
HTTP/1.1 301 Moved Permanently
Date: Mon, 27 Aug 2018 06:03:28 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Location: http://www.111.com/sdfsdf
[root@localhost_002 ~]# curl -x127.0.0.1:80 www.111.com/sdfssdfsadff/sdfsdf -I  #再一級子頁面則提示404:
HTTP/1.1 404 Not Found
#頁面提示404,則表示頁面不存:

狀態碼:經常使用 :

200 OK:表示成功:

301:表示頁面跳轉:

404:表示頁面不存在:

401:表示用戶名密碼驗證:

403:Forbidden:

三、Apache的訪問日記:日記所在目錄在虛擬主機httpd-vhosts.conf裏定義,日記格式在httpd.conf下定義:

1:日記格式所在目錄      /usr/local/apapche2.4/logs/

[root@localhost_002 ~]# ls /usr/local/apapche2.4/logs/
111.com-access_log  111.com-error_log  abc.com-access_log  abc.com-error_log  access_log  
error_log  httpd.pid
[root@localhost_002 ~]# tail -f /usr/local/apapche2.4/logs/111.com-access_log 
127.0.0.1 - - [27/Aug/2018:14:05:22 +0800] "HEAD HTTP://www.111.com/sdfssdfsadff/sdfsdf HTTP/1.1" 404 -
192.168.149.135 - - [27/Aug/2018:14:06:29 +0800] "GET / HTTP/1.1" 301 227
192.168.149.135 - lisi [27/Aug/2018:14:06:29 +0800] "GET / HTTP/1.1" 200 7

如上圖例:   HEAD表示是使用crul命令並加-I請求的,會顯示狀態碼:              get則表示正常的狀況:

自定義日記格式:   /usr/local/apapche2.4/conf/httpd.conf

[root@localhost_002 ~]#vim /usr/local/apapche2.4/conf/httpd.conf
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
#%h表示來源IP,   %l表login用戶    %u表示user 用戶,   %t表示time 時間    %r表示request 行爲,   %s表示status  狀態碼,  %b表示byte 大小:

格式信息: %h     %l     %u     %t     %r     %s     %b

User-Agent:瀏覽器標識:對於來訪問服務器的對象,使用的是什麼瀏覽器或客戶端:
如谷歌:使用的谷歌相似標示:
如:crul:則顯示curl相關:

Referer:訪問本頁面時,瀏覽器上一次所訪問的網址是什麼,好比你訪問子頁面,會記錄父頁面的網址:也就是說你是經過什麼跳轉到本論壇的:百度或者其餘瀏覽器:

如上圖例:系統自帶的日記格式有:     common       combined    兩種:

2:修改網站訪問日記格式:   /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf

[root@localhost_002 ~]# cat /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin yuanhh@foreb.com
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.example.com  www.2111.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} !^www.111.com$  
     RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
   </IfModule>
    ErrorLog "logs/111.com-error_log" 
    CustomLog "logs/111.com-access_log" combined    #此處修改common 爲 combined
</VirtualHost>

註釋:修改圖例中CustomLog這一個行,最後commoncombined

3:檢測配置而且啓動服務:        -t             graceful

[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 ~]# /usr/local/apapche2.4/bin/apachectl graceful

4:測試,分別用curl瀏覽器訪問,而後再次查看日記:        crul   -x127.0.0.1:80   www.111.com  -I

[root@localhost_002 ~]# curl -x127.0.0.1:80  www.111.com -I
HTTP/1.1 200 OK
Date: Mon, 27 Aug 2018 06:53:14 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
[root@localhost_002 ~]# curl -x127.0.0.1:80  www.2111.com -I
HTTP/1.1 301 Moved Permanently
[root@localhost_002 ~]# curl -x127.0.0.1:80  www.2111.com/123.php -I
HTTP/1.1 301 Moved Permanently
Date: Mon, 27 Aug 2018 06:53:31 GMT

5:查看日記格式:  tail    /usr/local/apapche2.4/logs/111.com-access_log

[root@localhost_002 ~]# tail /usr/local/apapche2.4/logs/111.com-access_log 
127.0.0.1 - - [27/Aug/2018:14:53:19 +0800] "HEAD HTTP://www.2111.com/ HTTP/1.1" 301 - "-" "curl/7.29.0"
127.0.0.1 - - [27/Aug/2018:14:53:31 +0800] "HEAD HTTP://www.2111.com/123.php HTTP/1.1" 301 - "-" "curl/7.29.0"
192.168.149.135 - lisi [27/Aug/2018:14:53:50 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

如上便可:

相關文章
相關標籤/搜索