41.Apache用戶認證及訪問日誌 域名跳轉

11.18 Apache用戶認證php

11.19/11.20 域名跳轉html

11.21 Apache訪問日誌linux

擴展 apache

apache虛擬主機開啓php的短標籤 http://ask.apelearn.com/question/5370vim

 

 

 

11.18 Apache用戶認證:瀏覽器

 

有時候咱們訪問一些網站,會直接跳出用戶名登陸界面。輸入正確的用戶名密碼,才能瀏覽網頁,但會會影響用戶體驗安全

有時候就會針對特定的頁面作一些用戶認證。php7

好比有一個需求。咱們在訪問abc.com的時候就不讓直接訪問,必需要輸入用戶名和密碼,驗證經過之後才能訪問。爲了增長安全性curl

 

 

方法以下:ide

~~1.

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 把第二個那個虛擬主機編輯成以下內容(由於第一個是默認的)

<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 指定須要認證的用戶爲所有可用用戶(就是在咱們.htpasswd裏定義的用戶)

</Directory> 這個別忘了加。阿鑫在作的時候忘記加,就報錯了

</VirtualHost>

/usr/local/apache2/bin/htpasswd -c -m /data/.htpasswd axin 生成密碼文件

-c就是建立的意思。若是咱們在增長一個用戶,就不須要加-c了。由於已經建立過了

-m第五加密

後面直接寫增長的用戶名就能夠。不用謝useradd

從新加載配置-t , graceful

綁定hosts,瀏覽器測試

curl -x127.0.0.1:80 111.com 狀態碼爲401 (即爲訪問的內容要作用戶驗證)

curl -x127.0.0.1:80 -uaming:passwd 111.com 指定指定用戶名和密碼。狀態碼爲200

curl -x127.0.0.1:80 -uaming:passwd 111.com -I 成功的話可顯示狀態碼

············

~~2.

 

假設咱們還有一種需求。只想對網站的某一些敏感信息作用戶密碼驗證:

也就是針對單個文件進行認證

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com" 注意咱們指定的111.com,因此curl的時候要寫/111.com/123.php

ServerName 111.com 在這下面加入

<FilesMatch 123.php> 注意前綴使用的是FilesMatch。只對123.php作二次驗證

AllowOverride AuthConfig

AuthName "123.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

</VirtualHost>

 

 

 

實例:

[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

<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

AuthUserFile /data/.htpasswd

require valid-user

ErrorLog "111.com-error_log"

CustomLog "111.com-access_log" common

</VirtualHost>

[root@axinlinux-01 ~]# /usr/local/apache2/bin/htpasswd -c -m /data/.htpasswd axin

New password: 兩次密碼要寫對

Re-type new password:

Adding password for user axin

[root@axinlinux-01 ~]# cat /data/.htpasswd

axin:$apr1$ctwpfMX8$.nW9DGLcmhBCpINv5Lb4T0

[root@axinlinux-01 ~]# /usr/local/apache2/bin/htpasswd -m /data/.htpasswd aming 增長用戶不須要加-c

New password:

Re-type new password:

Adding password for user aming

[root@axinlinux-01 ~]# cat /data/.htpasswd

axin:$apr1$ctwpfMX8$.nW9DGLcmhBCpINv5Lb4T0

aming:$apr1$rQBVstJV$i5VCNUnNTWDf1o26V6WUP0

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t

httpd: Syntax error on line 479 of /usr/local/apache2/conf/httpd.conf: Syntax error on line 43 of /usr/local/apache2/conf/extra/httpd-vhosts.conf: Expected </Directory> but saw </VirtualHost> 報錯了是由於阿鑫在作的時候配置的時候,忘了加上</Directory>

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful 沒有開啓Apache

httpd not running, trying to start

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl start 開啓Apache

httpd (pid 2564) already running

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful

[root@axinlinux-01 ~]# curl -x192.168.159.128:80 111.com -I curl一下爲401

HTTP/1.1 401 Unauthorized 401意思就是須要驗證用戶密碼

Date: Thu, 02 Aug 2018 11:22:09 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

WWW-Authenticate: Basic realm="111.com user auth"

Content-Type: text/html; charset=iso-8859-1

[root@axinlinux-01 ~]# curl -x192.168.159.128:80 -uaxin:wangxin789 111.com

111.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 -uaxin:wangxin789 111.com -I

HTTP/1.1 200 OK

Date: Thu, 02 Aug 2018 11:32:39 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

X-Powered-By: PHP/5.6.32

Content-Type: text/html; charset=UTF-8

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

11.19/11.20 域名跳轉

 

 

 

需求,把123.com域名跳轉到111.com,配置以下:

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/www.123.com"

ServerName www.123.com

ServerAlias 123.com 在這行下輸入如下配置

<IfModule mod_rewrite.c> 須要mod_rewrite模塊支持(就是咱們以前的most模塊)

RewriteEngine on 打開rewrite功能

RewriteCond %{HTTP_HOST} !^111.com$ 定義rewrite的條件(何時去跳轉),主機名(域名)不是111.com的時候。也就是咱們須要讓他調到的那個域名。寫法爲正則,!(取反),^(以什麼開始的),$(結束)加$爲了不出現.com.cn這樣的域名

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] 定義rewrite規則(就把新網址的最後一段做爲跳轉頁面)。當知足上面的條件時,這條規則纔會執行。假如咱們想讓他調到111.com/123.php,就要這樣寫。此時的^表示除去後面的/以外的部分

/表示/123.php裏的這個/

(.*)表示後面的123.php這一部分

$表示結束 寫了這麼多,意思其實就是,訪問的只要不是123.php的都要調到111.com裏去

$1表示這個命令的第一個小括號(.*)。若是新網站有111.com/.../123.php,就用$2表示,跟sed很像。,就要在加一個()並用$2表示(()裏面就要寫他/.../這部分的規則

[R=301,L] R=301表示301狀態,不要寫302會影響排名,權重。L表示只跳一次

</IfModule>

</VirtualHost>

出來之後,-t graceful

/usr/local/apache2/bin/apachectl -M|grep -i rewrite 若無該模塊,須要編輯配置文件httpd.conf,刪除rewrite_module (shared) 前面的#

curl -x127.0.0.1:80 -I 123.com 狀態碼爲301(跳轉頁面)

404(頁面不存在)

401(用戶密碼驗證)

403(受權。Apache配置文件的denied改成granted)

 

 

 

實例:

[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

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>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

</IfModule>

ErrorLog "111.com-error_log"

CustomLog "111.com-access_log" common

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -M |grep rewrite

[root@axinlinux-01 ~]# vi /usr/local/apache2/

LoadModule rewrite_module modules/mod_rewrite.so 把#刪掉

LoadModule php5_module modules/libphp5.so

#LoadModule php7_module modules/libphp7.so

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -M |grep rewrite

rewrite_module (shared)

[root@axinlinux-01 ~]# curl -x192.168.159.128:80 123.com -I

HTTP/1.1 301 Moved Permanently

Date: Thu, 02 Aug 2018 14:50:32 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

Location: http://111.com/

Content-Type: text/html; charset=iso-8859-1

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

11.21 Apache訪問日誌:

 

 

訪問日誌記錄用戶的每個請求

~1.

咱們在設置虛擬主機配置文件的時候,是有設置他的訪問日誌的

ErrorLog "111.com-error_log" 錯誤日誌

CustomLog "111.com-access_log" common 訪問日誌

cat /usr/local/apache2/111.com-access_log 路徑是在Apache目錄下的:

192.168.159.128 - - [02/Aug/2018:22:50:37 +0800] "GET HTTP://www.example.com/ HTTP/1.1" 301 223

192.168.159.128 - - [02/Aug/2018:22:55:36 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 -

他是這樣顯示的。是由於是配置文件裏的LogFormat的common的變量決定的。

vim /usr/local/apache2.4/conf/httpd.conf 搜索LogFormat 。 會顯示下面兩種格式:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

h來源IP l用戶 u用戶密碼 t時間 r行爲,網址(用什麼訪問的,到哪去了) s狀態碼 b大小

Referer 記錄瀏覽器訪問網址的上一條網址是什麼(從哪一個網址點進來的)

User-Agent 用戶代理,用戶用什麼來訪問到的,好比瀏覽器,顯示的內容就是是瀏覽器相關的字符串

LogFormat "%h %l %u %t \"%r\" %>s %b" common 默認是common格式,就是以前咱們cat出來的(比較簡單的那種格式)

~2.

把虛擬主機配置文件改爲以下(更改成combined格式的):

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias 123.com

CustomLog "logs/111.com-access_log" combined common改成combined

</VirtualHost>

從新加載配置文件 -t,graceful

curl -x192.168.159.128:80 -I 11.com

tail /usr/local/apache2/logs/111.com-access_log

相關文章
相關標籤/搜索