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

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

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

11.18 Apache用戶認證

註意: 本章使用瀏覽器進行檢測的前提是在物理機hosts文件添加虛擬機IP和虛擬主機域名。

配置用戶認證

編輯虛擬主機配置文件“httpd-vhosts.conf”。
[root@centos-01linux ~]# 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
#設定需要認證的用戶為“AuthUserFile”中定義的所有可用用戶
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
創建“httpd-vhosts.conf”中指定的密碼文件
[root@centos-01linux ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd centos-01
New password:
Re-type new password:
Adding password for user centos-01

[root@centos-01linux ~]# cat /data/.htpasswd
centos-01:$apr1$F7lSqIT0$hEgMT0Nhuxh6.BpmLvi57/
即,在“/data/.htpasswd”為用戶centos-01(自動創建)創建一個使用MD5算法加密的密碼文件。

註意: 只有在第一次創建該文件時加-c選項。

配置完成後重新加載
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl graceful
測試
[root@centos-01linux ~]# curl -x192.168.8.131:80 111.com -I
HTTP/1.1 401 Unauthorized
Date: Mon, 31 Jul 2017 01:42:50 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
此時提示狀態碼為“401”,說明當前所訪問的內容需要進行用戶認證。

使用用戶&密碼訪問:

[root@centos-01linux ~]# curl -x192.168.8.131:80 -ucentos-01:123456 111.com -I
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2017 02:18:21 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
狀態碼“200”,即訪問成功。

用瀏覽器測試:

mark

輸入用戶名“centos-01”和密碼後即可訪問:

mark

htpasswd命令

htpasswd命令是Apache的Web服務器內置工具,用於創建和更新儲存用戶名、域和用戶基本認證的密碼文件。

語法: htpasswd [option] [參數]
Options:
-c:=create,創建一個加密文件
-n:不更新加密文件,只將更新後的用戶名密碼顯示在屏幕上
-m:使用MD5算法對密碼進行加密(默認)
-d:使用CRYPT算法對密碼進行加密
-p:不對密碼進行加密,即明文密碼
-s:使用SHA算法對密碼進行加密
-b:在命令行一並輸入用戶名和密碼,而不是根據提示輸入密碼
-D:刪除指定用戶

應用

對網站中指定文件設置用戶認證!

虛擬主機配置
[root@centos-01linux ~]# 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>
<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 >,取消對目錄設定的用戶認證,更改為< FilesMatch>,即對文件設定用戶認證。

檢測
[root@centos-01linux ~]# curl -x192.168.8.131:80 111.com
welcome to 111.com

[root@centos-01linux ~]# curl -x192.168.8.131:80 111.com/123.php -I
HTTP/1.1 401 Unauthorized
Date: Mon, 31 Jul 2017 03:04:31 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
說明: 此時可以自由訪問“111.com”指定的目錄,但是當訪問目錄下的“123.php”文件時會報錯:401,即,需要進行用戶認證。

使用指定用戶名&密碼訪問:

[root@centos-01linux ~]# curl -x192.168.8.131:80 -ucentos-01:123456 111.com/123.php
welcom to 123file
成功!
使用瀏覽器檢測:

訪問 “111.com”:

mark

訪問"111.com/123.php":

mark

輸入指定用戶“centos-01”及密碼即可訪問:

mark

11.19-11.20 域名跳轉

域名跳轉分類及區別

種類:

301表示永久跳轉;302表示臨時跳轉。

區別:

使用效果不同
302跳轉是暫時的跳轉,搜索引擎會抓取新的內容而保留舊的網址。因為服務器返回302代碼,搜索引擎認為新的網址只是暫時的。
301重定向是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換為重定向之後的網址。
SEO使用方式不同
在搜索引擎優化中302跳轉被眾多黑帽SEO優化人員追求,對網站進行惡意302跳轉至非用戶目標訪問網站,因此搜索引擎對於網站的302跳轉通常是比較不友好,所以要慎用302跳轉!
SEO

SEO(Search Engine Optimization)搜索引擎優化,在了解搜索引擎自然排名機制的基礎上,對網站進行內部及外部的調整優化,改進網站在搜索引擎中的關鍵詞自然排名,獲得更多流量,從而達成網站銷售及品牌建設的預期目標。

域名跳轉配置

配置虛擬主機配置文件:httpd-vhosts.conf。
[root@centos-01linux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost :80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
#需要mod_rewrite的支持
RewriteEngine on
#開啟rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$
#Cond=condition,定義rewrite條件:所有非111.com的主機名(域名)
RewriteRule ^/(.
)$ http://111.com/$1 [R=301,L]
#定義rewrite規則:當滿足上面條件時才執行當前規則,即跳轉到111.com。
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
檢查系統配置:
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -M
在此檢查Apache是否加載了虛擬主機配置中調用的rewrite模塊,如果沒有加載,需要編輯Apache配置文件“httpd.conf”:

[root@centos-01linux ~]# vim /usr/local/apache2.4/conf/httpd.conf
……
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so
即,去掉註釋符號“#”,加載rewrite模塊。

檢測
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
rewrite_module (shared)
使用curl檢測:

[root@centos-01linux ~]# curl -x192.168.8.131:80 www.example.com -I
HTTP/1.1 301 Moved Permanently
Date: Mon, 31 Jul 2017 07:17:37 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1
此時,狀態碼為301,即設定了域名永久跳轉!

在瀏覽器進行檢測時,訪問“www.example.com”會直接跳轉到“111.com”。

11.21 Apache訪問日誌

日誌文件所在位置:

[root@centos-01linux ~]# ls /usr/local/apache2.4/logs
111.com-access_log abc.com-access_log access_log httpd.pid
111.com-error_log abc.com-error_log error_log
自定義日誌格式

系統自帶日誌格式:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host來源IP,l表示login用戶,u表示user用戶密碼,t表示time時間,r表示request(行為),s表示status狀態碼,b表示byte大小
#user-agent:用戶代理
#referer:跳轉到當前位置的上一個網址(即:提供當前IP的網站)
即:有combine和common兩種格式,默認使用common模式。

配置日誌格式

編輯虛擬主機配置文件“httpd-vhosts.conf”:

[root@centos-01linux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost :80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<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" combined
</VirtualHost>
說明: 將日誌文件後面原有 common改為combined。

重新加載:

[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos-01linux ~]# /usr/local/apache2.4/bin/apachectl graceful
樣式:

[root@centos-01linux ~]# cat /usr/local/apache2.4/logs/111.com-access_log
mark

Apache虛擬主機開啟PHP短標簽

在虛擬主機配置文件中加入如下內容即可:

php_admin_flag short_open_tag on
短標簽作用

如果不開啟短標簽,服務器將無法解析如下形式的PHP文件:

<?
phpinfo()
?>
而只能解析:

<?php
phpinfo()
?>
這種形式的PHP文件。

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