一、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
用到的兩個參數:-c:create,建立: -m:md5加密: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這一個行,最後common爲combined:
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"
如上便可: