12.8 Nginx用戶認證

Nginx用戶認證目錄概要

  • vim /usr/local/nginx/conf/vhost/test.com.conf//寫入以下內容
server
{
    listen 80;
    server_name test.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;
    
    location  /
    {
        auth_basic              "Auth";
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
    }
}
  • yum install -y httpd
  • htpasswd -c /usr/local/nginx/conf/htpasswd aming
  • -t && -s reload //測試配置並從新加載
  • mkdir /data/wwwroot/test.com
  • echo 「test.com」>/data/wwwroot/test.com/index.html
  • curl -x127.0.0.1:80 test.com -I//狀態碼爲401說明須要驗證
  • curl -uaming:passwd 訪問狀態碼變爲200
  • 編輯windows的hosts文件,而後在瀏覽器中訪問test.com會有輸入用戶、密碼的彈窗
  • 針對目錄的用戶認證
location  /admin/
    {
        auth_basic              "Auth";
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
}

Nginx用戶認證

  1. 首先切換到usr/local/nginx/conf/vhost/目錄下
[root@hanfeng ~]# cd /usr/local/nginx/conf/vhost/
[root@hanfeng vhost]#
  1. 新建新建一個虛擬主機test.com.conf,並編輯
[root@hanfeng vhost]# ls
aaa.com.conf
[root@hanfeng vhost]# vim test.com.conf

添加如下內容
server
{
    listen 80;
    server_name test.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;
    
    location  /                    //表示全站,都須要進行用戶認證
    #location  /admin                                     // 這個地方只要加上」 /admin 」 就變成 針對這個站點的「admin」 這個目錄須要用戶認證
    #location  ~ admin.php                          //若是把這行這樣寫,就會變成,匹配 「 admin.php 」這個頁面的時候才須要用戶認證
    {
        auth_basic              "Auth";            //定義用戶認證的名字
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;         //用戶名密碼文件
    }
}

保存退出
  1. 在配置完成後,須要生成密碼文件
  2. 在生成密碼文件,須要用到Apache生成密碼文件的工具「 htpasswd 」
  • 若本機已經安裝過Apache,能夠直接使用命令htpasswd進行生成
/usr/local/apache2.4/bin/htpasswd
  • 如果本機未安裝Apache,可直接 yum install -y httpd 進行安裝,由於yum安裝的,因此工具存放在/usr/bin/下,能夠直接使用htpasswd
yum install -y httpd
  1. 這裏因爲未安裝過Apache,因此先yum安裝
[root@hanfeng vhost]# yum install -y httpd 

在yum安裝後,能夠直接使用htpasswd命令
  1. htpasswd指定文件,生成用戶
[root@hanfeng vhost]# htpasswd -c /usr/local/nginx/conf/htpasswd hanfeng
New password:                     //密碼hanfeng
Re-type new password: 
Adding password for user hanfeng
[root@hanfeng vhost]#
  1. 使用cat 命令查看/usr/local/nginx/conf/htpasswd 文件,會看到生成了一行字符串
[root@hanfeng vhost]# cat /usr/local/nginx/conf/htpasswd 
hanfeng:$apr1$Vvig1g73$oHYs5Ng/ubqoYXzZT4TWP/
[root@hanfeng vhost]#
  1. 關於htpasswd -c 命令 第一次建立的時候由於沒有htpasswd這個文件,須要-c建立,第二使用的時候由於已經有這個htpasswd文件了,將再也不須要-c 選項,若是還繼續使用-c 這個選項,將會重置 htpasswd裏的東西
  2. 再來htpasswd指定文件,生成另外一個用戶
[root@hanfeng vhost]# htpasswd /usr/local/nginx/conf/htpasswd gurui
New password: 
Re-type new password: 
Adding password for user gurui
[root@hanfeng vhost]# cat /usr/local/nginx/conf/htpasswd 
hanfeng:$apr1$Vvig1g73$oHYs5Ng/ubqoYXzZT4TWP/
gurui:$apr1$mqc2Dgwa$qVvurqGN6gj8hX3tEpQ6j/
[root@hanfeng vhost]#
  1. 檢查配置nginx文件是否存在語法錯誤
[root@hanfeng vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hanfeng vhost]#
  1. 從新加載配置文件
  • 在從新加載的時候,若配置文件中存在錯誤,配置文件將不會生效;
  • 若是是直接使用restart,若是配置有錯,將會直接影響到網站的運行
[root@hanfeng vhost]# /usr/local/nginx/sbin/nginx -s reload
[root@hanfeng vhost]#
  1. 測試
[root@hanfeng vhost]# curl -x127.0.0.1:80 test.com
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hanfeng vhost]# curl -x127.0.0.1:80 test.com -I
HTTP/1.1 401 Unauthorized
Server: nginx/1.12.1
Date: Wed, 03 Jan 2018 16:52:23 GMT
Content-Type: text/html
Content-Length: 195
Connection: keep-alive
WWW-Authenticate: Basic realm="Auth"

[root@hanfeng vhost]#
  1. 會提示錯誤碼401,就是須要用戶,因此用curl指定用戶
  2. 這時指定用戶和密碼再來訪問,會提示404,這是由於去訪問index.html,可是還未建立
[root@hanfeng vhost]# curl -uhanfeng:hanfeng -x127.0.0.1:80 test.com
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hanfeng vhost]#
  1. 建立目錄,而後新建index.html
[root@hanfeng vhost]# mkdir /data/wwwroot/test.com
[root@hanfeng vhost]# echo 「test.com」>/data/wwwroot/test.com/index.html
[root@hanfeng vhost]#
  1. 這時再來訪問,會看到顯示正常
[root@hanfeng vhost]# curl -uhanfeng:hanfeng -x127.0.0.1:80 test.com
「test.com」
[root@hanfeng vhost]#
  1. 這裏的用戶認證是針對整站

針對某一個目錄下,才須要認證

  • 好比訪問admin的時候,才須要認證
  1. 首先訪問admin嘗試下
[root@hf-01 vhost]# curl -uhanfeng:hanfeng -x127.0.0.1:80 test.com/admin/
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hf-01 vhost]#
  1. 而後在/usr/local/nginx/conf/vhost/test.com.conf配置文件中定義,只須要在location / 後加上admin/ 目錄便可
[root@hf-01 vhost]# vim test.com.conf

在location  / 後加上admin/ 目錄
server
{
    listen 80;
    server_name test.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;

    location  /admin/
    {
        auth_basic              "Auth";
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
    }
}
保存退出
  1. 檢查配置文件是否存在語法錯誤
[root@hf-01 vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hf-01 vhost]#
  1. 從新加載配置文件
[root@hf-01 vhost]# /usr/local/nginx/sbin/nginx -s reload
[root@hf-01 vhost]#
  1. 這時候再來訪問test.com,就不須要指定用戶名和密碼了
[root@hf-01 vhost]# curl -x127.0.0.1:80 test.com
「test.com」
[root@hf-01 vhost]#

6.訪問test.com/admin/目錄php

[root@hf-01 vhost]# curl -x127.0.0.1:80 test.com/admin/
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hf-01 vhost]#
  1. 這時建立一個測試頁面
  2. 先新建目錄
[root@hf-01 vhost]# mkdir /data/wwwroot/test.com/admin
[root@hf-01 vhost]#
  1. 而後在admin目錄下新建index.html
[root@hf-01 vhost]# echo "test.com admin dir" > /data/wwwroot/test.com/adm
in/index.html
[root@hf-01 vhost]#
  1. 這時再來訪問 test.com/admin/ 會顯示401,可是指定用戶名和密碼後就會正常顯示
[root@hf-01 vhost]# curl -x127.0.0.1:80 test.com/admin/
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hf-01 vhost]# curl -uhanfeng:hanfeng -x127.0.0.1:80 test.com/admin/
test.com admin dir
[root@hf-01 vhost]#

針對URL

  • 好比針對admin.php
  1. 首先在配置文件/usr/local/nginx/conf/vhost/test.com.conf下定義,在 location 後加~ admin.php便可
[root@hf-01 vhost]# vim test.com.conf

在 location  後加~ admin.php便可
server
{
    listen 80;
    server_name test.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;

    location  ~ admin.php
    {
        auth_basic              "Auth";
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
    }
}
保存退出
  1. 檢查配置文件是否存在語法錯誤
[root@hf-01 vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hf-01 vhost]#
  1. 從新加載配置文件
[root@hf-01 vhost]# /usr/local/nginx/sbin/nginx -s reload
[root@hf-01 vhost]#
  1. 這時候就能夠直接訪問 test.com/admin/,不須要指定用戶名和密碼了,可是在訪問admin.php的時候,則會顯示401——>狀態碼爲401說明須要驗證
[root@hf-01 vhost]# curl -x127.0.0.1:80 test.com/admin/
test.com admin dir
[root@hf-01 vhost]# curl -x127.0.0.1:80 test.com/admin.php
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@hf-01 vhost]#
相關文章
相關標籤/搜索