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