1. 程式人生 > >2018-3-2 Linux學習筆記

2018-3-2 Linux學習筆記

11.18 Apache用戶認證 11.19/11.20 域名跳轉 11.21 Apache訪問日誌

11.18 Apache用戶認證
  • 背景:當網站上有些內容不想讓別人訪問到時,可做用戶認證.這樣,當用戶訪問到該網站時,會彈出一個對話框要求輸入用戶和密碼,通過後才能繼續訪問網站.
  • 實現用戶認證步驟:
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf #把123.com那個虛擬主機編輯成如下內容
    <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    <Directory /data/wwwroot/www.123.com> #指定認證的目錄

    AllowOverride AuthConfig #這個相當於打開認證的開關
    AuthName "123.com user auth" #自定義認證的名字,作用不大
    AuthType Basic //認證的類型 #一般為Basic
    AuthUserFile /data/.htpasswd #指定密碼文件所在位置
    require valid-user #指定需要認證的用戶為全部可用用戶
    </Directory>
    </VirtualHost>

  • /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming #設置aming用戶的認證密碼
  • /usr/local/apache2.4/bin/apachectl -t #測試語法是否正確
  • /usr/local/apache2.4/bin/apachectl graceful #重新加載配置文件

  • 驗證是否設置成功:
  • 方法1---本地電腦瀏覽器中測試
    修改本地電腦中C:\Windows\System32\drivers\etc\hosts文件,添加一行192.168.206.135 www.abc.com, 以綁定hosts(其中IP為linux虛擬機的IP),然後打開瀏覽器輸入www.abc.com測試---正常的話會彈出一對話框,要求你輸入賬戶密碼,通過後才顯示網頁.
  • 方法2---直接在linux虛擬機中測試:
    curl -x127.0.0.1:80 www.123.com #此時應顯示錯誤狀態碼為401
    curl -x127.0.0.1:80 -uaming:123 www.123.com #此時應正確顯示index.html中的內容.其中123為之前設定的密碼.正確狀態碼為200(此處並不會顯示)
    技術分享圖片

  • 還可以針對單個文件進行認證
    <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    <FilesMatch admin.php>
    AllowOverride AuthConfig
    AuthName "123.com user auth"
    AuthType Basic
    AuthUserFile /data/.htpasswd
    require valid-user
    </FilesMatch>
    </VirtualHost>
  • 驗證是否設置成功:
    curl -x127.0.0.1:80 www.123.com/admin.php #此時應顯示錯誤狀態碼為401
    curl -x127.0.0.1:80 -uaming:123 www.123.com/admin.php #此時應正確顯示admin.php中的內容
    技術分享圖片

11.19/11.20 域名跳轉

  • 背景: 有時候我們的網站啟用了一個新的域名, 原來的域名不再使用了,但為了讓老用戶訪問舊域名時能自動轉到新網站上,這時我們需要做域名跳轉.
  • 例子: 把www.example.com 域名跳轉到123.com
  • 實現域名跳轉的配置如下:
    <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123.com"
    ServerName 123.com
    ServerAlias www.example.com 2111.com
    <IfModule mod_rewrite.c> #需要mod_rewrite模塊支持
    RewriteEngine on //打開rewrite功能
    RewriteCond %{HTTP_HOST} !^123.com$ #定義rewrite的條件,主機名(域名)不是123.com則滿足條件
    RewriteRule ^/(.
    )$ http://123.com/$1 [R=301,L]
    #定義rewrite規則,當滿足上面的條件時,這條規則才會執行.301表示永久跳轉,302為臨時跳轉,L為Last之意,表示只跳轉一次.
    </IfModule>
    </VirtualHost>

  • /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite #檢測是否加載rewrite_module (shared)模塊
    技術分享圖片
  • 若無該模塊,則需要編輯配置文件httpd.conf,刪除rewrite_module (shared) 前面的#以讓apache加載該模塊
    技術分享圖片
  • 驗證跳轉狀態(狀態碼為301)
    curl -x127.0.0.1:80 -I www.example.com /
    技術分享圖片

11.21 Apache訪問日誌

  • 訪問日誌記錄用戶的每一個請求,apache日誌目錄為/usr/local/apache2.4/logs.
  • 查看系統預定義日誌格式:
  • vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

  • 更改當前日誌格式(由common改成combined,把虛擬主機配置文件改成如下:
    <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/123.com"
    ServerName 123.com
    ServerAlias www.example.com 2111.com
    CustomLog "logs/123.com-access_log" combined
    </VirtualHost>

  • 更改完重新加載配置文件:
    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful

  • 通過curl訪問以產生日誌記錄:
    curl -x127.0.0.1:80 -I 123.com #
  • 查看產生的日誌記錄:
    tail /usr/local/apache2.4/logs/123.com-access_log
    技術分享圖片
    擴展學習:
    apache虛擬主機開啟php的短標簽 http://ask.apelearn.com/question/5370

2018-3-2 Linux學習筆記