1. 程式人生 > >Apache(httpd)配置--用戶認證,域名跳轉和訪問日誌配置

Apache(httpd)配置--用戶認證,域名跳轉和訪問日誌配置

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

一、用戶認證

用戶認證功能就是在用戶訪問網站的時候,需要輸入用戶名密碼才能進行訪問。一些比較好總要的站點和網站後臺都會加上用戶認證,以保證安全。
實例:下面對zlinux.com站點來做一個全站的用戶認證:

步驟1:編輯虛擬主機配置文件

[root@zlinux ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf    //在linuxtest.com虛擬主機下編輯添加以下內容

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123test"
    ServerName linuxtest.com
    <Directory /data/wwwroot/123test>   //指定認證的目錄    
        AllowOverride AuthConfig             //這個相當於打開認證的開關
        AuthName "linuxtest.com user auth"       //自定義認證的名字,作用不大
        AuthType Basic                            //認證的類型,一般為Basic
        AuthUserFile /data/.htpasswd      //指定密碼文件所在位置
        require valid-user                        //指定需要認證的用戶為全部可用用戶
    </Directory>
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common

步驟2:創建密碼

在創建密碼文件先要了解htpasswd命令:

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

語法:
htpasswd [選項] [參數]
選項:

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

下面創建密碼文件:

[root@zlinux ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 
[root@zlinux ~]# /usr/local/apache2/bin/htpasswd -cm /data/.htpasswd zlinux   // -c 表示創建  -m 指定MD5加密 指定所在位置  如果再次增加用戶可以不用-c選項,-c是首次創建文件使用的,,否則/data/.htpasswd會被重置,之前用戶被清空
New password: 
Re-type new password: 
Adding password for user zlinux
[root@zlinux ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@zlinux ~]# /usr/local/apache2/bin/apachectl graceful

步驟3:測試用戶認證是否啟用

在瀏覽器中測試,需要修改下windows下hosts文件,把linuxtest.com域名指向Linux機器:
技術分享圖片
使用curl進行測試:

[root@zlinux ~]# curl -x 192.168.204.128:80 linuxtest.com -I
HTTP/1.1 401 Unauthorized          //說明:因為生成了密碼,所以在不指定用戶名和密碼的情況下會報401錯誤
Date: Fri, 02 Mar 2018 09:59:05 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="linuxtest.com user auth"
Content-Type: text/html; charset=iso-8859-1

[root@zlinux ~]# curl -x 192.168.204.128:80 -uzlinux:passwd linuxtest.com -I        //使用-u指定用戶名和密碼
HTTP/1.1 200 OK                                                 //狀態碼“200”,即訪問成功
Date: Fri, 02 Mar 2018 10:00:34 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

步驟4:單個文件進行認證

在配置文件中添加以下類似內容(根據自己的目錄修改):

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

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123test"
    ServerName linuxtest.com
    <FilesMatch admin.php>    //針對文件,這裏針對admin.php
        AllowOverride AuthConfig
        AuthName "123.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </FilesMatch>
</VirtualHost>

二、配置域名跳轉

域名跳轉類似於將網頁重新指向另一個網站,但區別是域名跳轉會將域名本身重新指向網站,而不使用HTML或腳本來進行重新指向。當域名被設置為跳轉至另一網站,域名的地址將不會保留在瀏覽器的URL欄中,該欄顯示的會是新頁面的URL。如果您希望保留該欄中的URL,則需要使用隱形跳轉。
下面做個實例,把www.linuxtestbak.com域名跳轉到linuxtest.com

步驟1:修改虛擬主機配置文件

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123test"
    ServerName linuxtest.com
    ServerAlias www.linuxtestbak.com
    <IfModule mod_rewrite.c>          //需要mod_rewrite模塊支持
        RewriteEngine on                   //打開rewrite功能
        RewriteCond %{HTTP_HOST} !^linuxtest.com$     //定義rewrite的條件,主機名(域名)不是linuxtest.com滿足條件
                RewriteRule ^/(.*)$ http://linuxtest.com/$1 [R=301,L]     //定義rewrite規則:當滿足上面條件時才執行當前規則,即跳轉到linuxtest.com。301表示永久跳轉;302表示臨時跳轉。
   </IfModule>
#    <Directory /data/wwwroot/123test>
#        AllowOverride AuthConfig
#        AuthName "linuxtest.com user auth"
#        AuthType Basic
#        AuthUserFile /data/.htpasswd
#        require valid-user
#    </Directory>
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

步驟2:修改httpd.conf文件

[root@zlinux ~]# vim /usr/local/apache2/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so     //去掉#,以啟用這個模塊

步驟3:測試

[root@zlinux ~]# curl -x 192.168.204.128:80 www.linuxtestbak.com -I
HTTP/1.1 301 Moved Permanently
Date: Fri, 02 Mar 2018 10:53:51 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Location: http://linuxtest.com/
Content-Type: text/html; charset=iso-8859-1

[root@zlinux ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@zlinux ~]# /usr/local/apache2/bin/apachectl graceful

使用瀏覽器(hosts需要修改),訪問www.linuxtestbak.com會直接跳轉到linuxtest.com

三、配置訪問日誌

1、Apache訪問日誌所在位置:

[root@zlinux ~]# ls /usr/local/apache2/logs/
123test-access_log  abstest-error_log                   dummy-host2.example.com-error_log  error_log
123test-error_log   access_log                          dummy-host.example.com-access_log  httpd.pid
abctest-access_log  dummy-host2.example.com-access_log  dummy-host.example.com-error_log
[root@zlinux ~]# cat  /usr/local/apache2/logs/123test-access_log     //common格式日誌
192.168.204.128 - - [02/Mar/2018:19:06:28 +0800] "HEAD HTTP://linuxtestbak.com/ HTTP/1.1" 301 -
192.168.204.128 - - [02/Mar/2018:19:07:51 +0800] "GET HTTP://linuxtest.com/ HTTP/1.1" 200 28
192.168.204.128 - - [02/Mar/2018:19:09:05 +0800] "HEAD HTTP://www.linuxtestbak.com/ HTTP/1.1" 301 -
192.168.204.1 - - [02/Mar/2018:19:10:55 +0800] "GET / HTTP/1.1" 200 28
192.168.204.1 - - [02/Mar/2018:19:11:08 +0800] "GET / HTTP/1.1" 200 28

2、查看日誌格式

[root@zlinux ~]# vim /usr/local/apache2/conf/httpd.conf      //搜索LogFormat

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

說明:combined和common兩種格式,默認使用common格式。

3、更改日誌的格式為combined

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

    ErrorLog "logs/123test-error_log"
    CustomLog "logs/123test-access_log" combined

[root@zlinux ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@zlinux ~]# /usr/local/apache2/bin/apachectl graceful

4,做一些訪問操作之後,再查看日誌。

[root@zlinux ~]# cat  /usr/local/apache2/logs/123test-access_log 
192.168.204.128 - - [02/Mar/2018:19:06:28 +0800] "HEAD HTTP://linuxtestbak.com/ HTTP/1.1" 301 -
192.168.204.128 - - [02/Mar/2018:19:07:51 +0800] "GET HTTP://linuxtest.com/ HTTP/1.1" 200 28
192.168.204.128 - - [02/Mar/2018:19:09:05 +0800] "HEAD HTTP://www.linuxtestbak.com/ HTTP/1.1" 301 -
192.168.204.1 - - [02/Mar/2018:19:10:55 +0800] "GET / HTTP/1.1" 200 28
192.168.204.1 - - [02/Mar/2018:19:11:08 +0800] "GET / HTTP/1.1" 200 28
192.168.204.1 - - [02/Mar/2018:19:20:16 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
192.168.204.1 - - [02/Mar/2018:19:20:19 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
192.168.204.1 - - [02/Mar/2018:19:20:27 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
192.168.204.128 - - [02/Mar/2018:19:20:39 +0800] "HEAD HTTP://www.linuxtestbak.com/ HTTP/1.1" 301 - "-" "curl/7.29.0"
192.168.204.128 - - [02/Mar/2018:19:20:45 +0800] "HEAD HTTP://www.linuxtestbak.com/ HTTP/1.1" 301 - "-" "curl/7.29.0"
192.168.204.128 - - [02/Mar/2018:19:20:54 +0800] "GET HTTP://linuxtest.com/ HTTP/1.1" 200 28 "-" "curl/7.29.0"
192.168.204.128 - - [02/Mar/2018:19:20:57 +0800] "GET HTTP://linuxtest.com/ HTTP/1.1" 200 28 "-" "curl/7.29.0"
192.168.204.128 - - [02/Mar/2018:19:20:58 +0800] "GET HTTP://linuxtest.com/ HTTP/1.1" 200 28 "-" "curl/7.29.0"

日誌格式變化很明顯。

Apache(httpd)配置--用戶認證,域名跳轉和訪問日誌配置