一、問題描述
????????目前我們配置的網站內容都是沒有限制,可以讓任何人打開瀏覽器都能夠訪問,這樣就會存在一個問題(可能會存在一些惡意訪問的用戶進行惡意操作,直接訪問到我們的敏感后臺路徑進行操作,風險就會很大);并且我們也只是希望這個網站只有我們自己能夠訪問,其他人訪問不了。
二、問題分析
1、我們的網站目前能夠讓任何人都打開瀏覽器訪問;
2、只是希望這個網站只有我們自己能夠訪問,其他人訪問不了;
根據分析出的的問題其實是需要給在nginx上部署的指定網站開啟basic認證即可實現。
三、實現方法
3.1、生成htpasswd的賬號密碼文件
3.1.1、通過在線的htpasswd網站生成
可以直接在瀏覽器中輸入【htpasswd在線】即可查詢到,也可以使用我這里提供的這2個
在線 htpasswd 生成器OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具,提供jsbin在線 CSS、JS 調試,在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器,MarkDown編譯器等其他在線工具https://tool.oschina.net/htpasswd在線htpasswd生成器在線htpasswd生成工具,在線nginx htpasswd生成
https://www.lddgo.net/encrypt/htpasswd
?使用在線生成器獲取到生成結果后復制該結果,然后在到指定路徑下創建一個文件然后將結果粘貼上去就行。
# 1、進入需要放置basic用戶和密碼文件的路徑(沒有指定路徑的話需要使用mkdir nginx命令創建)
mkdir -p /opt/nginx/basicauth/
cd /opt/nginx/basicauth/# 2、直接在/opt/nginx/basicauth/路徑下創建一個名為用戶名b.coffeemilk.com.htpasswd的basic文件,然后將我們在在線網站設置用戶為coffeemilk,密碼為123456的結果粘貼到b.coffeemilk.com.htpasswd文件即可
touch b.coffeemilk.com.htpasswd
vi b.coffeemilk.com.htpasswd
3.1.2、安裝htpasswd工具在本機生成
# 安裝htpasswd工具命令
yum install httpd-tools -y
# 查看htpasswd的用法命令
htpasswd --help
序號 | 參數 | 參數說明 |
1 | -c | 創建一個新文件 |
2 | -n | 不更新文件;只是在屏幕上顯示文件內容 |
3 | -b | 直接在命令行中輸入密碼,而不是提示后再輸入密碼 |
4 | -i | 不用驗證即可直接從輸入流中讀取到密碼內容(只要是方便腳本使用) |
5 | -m | 強制對密碼進行MD5加密(默認) |
6 | -2 | 強制對密碼進行SHA-256哈希加密(安全) |
7 | -5 | 強制對密碼進行SHA-512哈希加密(安全) |
8 | -B | 強制對密碼進行bcrypt加密(非常安全) |
9 | -C | 設置用于bcrypt算法的計算時間 (越高越安全,但速度越慢,默認值:5,有效值:4到31) |
10 | -r | 設置用于SHA-256、SHA-512算法的輪數 (越高越安全,但速度越慢,默認值:5000) |
11 | -d | 強制對密碼進行CRYPT加密(最多8個字符,不安全) |
12 | -s | 強制對密碼進行SHA-1加密(不安全) |
13 | -p | 不對密碼進行加密(明文,不安全) |
14 | -D | 刪除指定的用戶 |
15 | -v | 驗證指定用戶的密碼 |
在Windows和NetWare以外的其他系統上,“-p”標志可能不起作用;SHA-1算法不使用鹽,其安全性不如MD5算法 |
# 1、進入需要放置basic用戶和密碼文件的路徑(沒有指定路徑的話需要使用mkdir nginx命令創建)
mkdir -p /opt/nginx/basicauth/
cd /opt/nginx/basicauth/# 2、直接在/opt/nginx/basicauth/路徑下創建用戶名為coffeemilk的basic用戶名和密碼文件命令
htpasswd -c ./a.coffeemilk.com.htpasswd coffeemilk
# 在當前目錄下生成一個b.coffeemilk.com.htpasswd文件,用戶名coffeemilk,密碼123456789,默認采用MD5加密方式
htpasswd -bc ./b.coffeemilk.com.htpasswd coffeemilk 123456789# 在當前目錄下生成一個b.coffeemilk.com.htpasswd文件,用戶名coffeemilk,密碼123456789,指定采用bcrypt加密方式
htpasswd -Bbc ./b.coffeemilk.com.htpasswd coffeemilk 123456789# 在原有密碼文件中增加下一個用戶
htpasswd -b ./b.coffeemilk.com.htpasswd test 123456# 刪除指定路徑下basic文件內的指定用戶(比如刪除/opt/nginx/basicauth路徑下的這個b.coffeemilk.com.htpasswd的basic文件里面的test用戶)
htpasswd -D /opt/nginx/basicauth/b.coffeemilk.com.htpasswd test
3.2、給需要配置的網站設置basic認證
實現將Nginx的每個網站配置單獨的nginx配置文件——每個網站單獨管理https://blog.csdn.net/xiaochenXIHUA/article/details/140416476?spm=1001.2014.3001.5501進入我們每個網站單獨的nginx配置文件修改需要設置basic內容的網站文件即可修改內容如下:
# 進入每個網站對應的單獨nginx配置文件路徑命令
cd /etc/nginx/conf.d# 編輯指定的網站需要配置basic的nginx配置文件(比如給b.coffeemilk.com網站單獨的nginx配置文件b.coffeemilk.com.conf進行編輯)命令
vi b.coffeemilk.com.conf
#auth_basic表示開啟這個功能,"b.coffeemilk.com"是備注信息,隨便寫,一些老瀏覽器能看到,新瀏覽器都看不到備注信息了。
auth_basic "b.coffeemilk.com";# 這是basic賬號密碼文件存放的位置
auth_basic_user_file /opt/nginx/basicauth/b.coffeemilk.com.htpasswd;
3.3、檢查配置的Nginx內容是否正確和重啟Nginx服務
nginx -t
systemctl restart nginx
3.4、驗證basic的效果
?????????在瀏覽器輸入自己已經設置了basic認證的網站(比如我這里的是http://b.coffeemilk.com/),打開該網站后無法直接看到網站內容會直接有一個輸入賬號密碼的彈窗,輸入正確后才能夠看到網站內容表示成功了,如下圖所示: