1. 程式人生 > >四十一、Apache用戶認證、域名跳轉、Apache訪問日誌

四十一、Apache用戶認證、域名跳轉、Apache訪問日誌

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

一、Apache用戶認證

功能是用戶在訪問網站時,需要輸入用戶名和密碼才能進入網站。一些重要站點或網站後臺通常加用戶認證,目的是保證安全。

# 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 //指定需要認證的用戶為全部可用用戶

</Directory>

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

httpd配置文件配置完成,創建密碼文件:

# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd MRX

New password:

Re-type new password:

Adding password for user MRX

htpasswd命令為創建用戶的工具,-c創建(create),-m指定密碼加密方式為MD5,再加上用戶名;

/data/.htpasswd為密碼文件,MRX為要創建的用戶,第一次執行該命令需要加-c;

第二次再創建新的用戶時,就不用加-c了,否則/data/.htpasswd文件會被重置,之前的用戶被清空。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# curl -x 127.0.0.1:80 111.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>401 Unauthorized</title>

</head><body>

<h1>Unauthorized</h1>

<p>This server could not verify that you

are authorized to access the document

requested. Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p>

</body></html>

//401狀態碼,表示訪問的內容需要做用戶驗證,驗證不對就401,對就200。

可以在瀏覽器訪問這個111.com,前提是需要在Windows的hosts文件裏加上111.com。

# curl -x 127.0.0.1:80 -uMRX:12345 111.com

111.com[root@MRX ~]# //訪問成功,狀態碼200。

-u:指定用戶名和密碼

上面的操作是對整個站點做的認證,其實也可以針對某個目錄或者文件進行認證,比如對www.111.com/admin/目錄進行認證,只需要修改一個地方,把<Directory /data/wwwroot/111.com/admin/>;如果是文件,則需要這樣改:

#<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> //註釋掉

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# vim /data/wwwroot/111.com/123.php

<?php

echo "123,php";

# curl -x 127.0.0.1:80 111.com/123.php -I //此時訪問這個文件時就會401

HTTP/1.1 401 Unauthorized

Date: Fri, 13 Apr 2018 10:26:40 GMT

Server: Apache/2.4.33 (Unix) PHP/7.1.6

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

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


二、域名跳轉(域名重定向)

301狀態碼:永久重定向,永久跳轉。將權重轉移。

域名跳轉的作用:

1.一個站點有多個域名會對SEO有影響。

2.若之前的某個域名不再使用,但是搜索引擎還留著之前老域名的鏈接,意味著用戶可能會搜到並點擊老域名,則需要把老域名做個跳轉,跳到新域名,這樣用戶搜索老域名的時候,可以直接跳轉訪問到新網站。

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

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

<IFModule mod_rewrite.c> //需要mod_rewrite模塊支持

RewriteEngine on //打開rewrite功能

RewriteCond %{HTTP_HOST} !^111.com$

//定義rewrite的條件,當訪問的主機名(域名)不是111.com時滿足條件。以111開頭^,以com結尾$的跳轉到111.com來。

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

//定義rewrite規則,當滿足上面的條件時,這條規則才會執行,跳到111.com,/(.*)意思是111.com/123.php,123.php就是.*,$1就是第一個小括號,$2第二個小括號,L:只跳轉一次結束。302:臨時重定向。

</IFModule>

這裏是在新域名的配置文件裏做設置。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

測試前要看rewrite的模塊是否打開:

# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

進入主配置文件打開:

# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

把這行的#去掉。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

rewrite_module (shared)

模塊加載好,開始測試:

# curl -x 127.0.0.1:80 2111.com.cn -I

HTTP/1.1 301 Moved Permanently 狀態碼301

Date: Fri, 13 Apr 2018 12:17:18 GMT

Server: Apache/2.4.33 (Unix) PHP/7.1.6

Location: http://111.com/

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

# curl -x 127.0.0.1:80 2111.com.cn

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>301 Moved Permanently</title>

</head><body>

<h1>Moved Permanently</h1>

<p>The document has moved <a href="http://111.com/">here</a>.</p>

</body></html>

跳到了111.com


三、Apache訪問日誌

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

#<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 "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

該虛擬主機的訪問日誌路徑:/usr/local/apache2.4/logs/111.com-access_log

127.0.0.1 - - [13/Apr/2018:20:17:08 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 223

127.0.0.1 - - [13/Apr/2018:20:17:18 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -

GET:沒加-I;HEAD:加了-I,只顯示狀態碼301。

HTTP/1.1:HTTP的版本;301狀態碼,223:大小。


# vim /usr/local/apache2.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

兩種日誌的格式,默認common。

User-Agent:用戶代理。

Referer:User-Agent的上一步網址。

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

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" combined 更改格式

</VirtualHost>

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# curl -x 127.0.0.1:80 111.com/123.php -I

# curl -x 127.0.0.1:80 111.com/123.php

# cat /usr/local/apache2.4/logs/111.com-access_log 剛改的格式發生變化

127.0.0.1 - - [13/Apr/2018:21:01:07 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0"

127.0.0.1 - - [13/Apr/2018:21:02:40 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0"

curl/7.29.0:這個就是User-Agent。


擴展

apache虛擬主機開啟php的短標簽 http://ask.apelearn.com/question/5370


四十一、Apache用戶認證、域名跳轉、Apache訪問日誌