基礎(chǔ)認(rèn)證簡介:
在某些情況下,我們希望對(duì)服務(wù)器上的一些資源進(jìn)行限制,例如服務(wù)器 /fakerealm 路徑下的所有資源或域,必須先進(jìn)行身份驗(yàn)證然后才能訪問資源。
客戶端以 : 連接用戶名和密碼后,再經(jīng) Base64 編碼,通過 Authorization 請(qǐng)求頭發(fā)送該密文至服務(wù)端進(jìn)行驗(yàn)證,每次請(qǐng)求都需要重復(fù)發(fā)送該密文;
可見Basic認(rèn)證過程簡單,安全性也低,存在泄露個(gè)人賬號(hào)信息以及其他諸多安全問題,最好在實(shí)現(xiàn)了Transport Layer Security (TLS)的情況下去使用。
對(duì)于這個(gè)需求我們可以通過 HTTP Basic authentication 協(xié)議來完成,Nginx 使用 ngx_http_auth_basic_module 模塊支持 HTTP基本身份驗(yàn)證功能 。
1. 安裝
yum -y install httpd
2. 添加配置
server {
listen 80;
server_name www.demo.com;
#..其它配置項(xiàng)目省略
location ~ ^/fakerealm {
auth_basic "authentication";
auth_basic_user_file /etc/nginx/realmdir/htpasswd;
}
#..其它配置項(xiàng)目省略
}
其中有幾個(gè)注意點(diǎn):
- auth_basic:隨便填,有就行,會(huì)顯示在輸入用戶名密碼的彈框中;
- auth_basic_user_file:告訴服務(wù)器去哪個(gè)文件中匹配訪問者輸入的用戶名和密碼;
如果是配合 HTTPS 使用,一般會(huì)將 80 端口的 HTTP 請(qǐng)求轉(zhuǎn)發(fā)到 443 的 HTTPS 請(qǐng)求中,所以上述配置應(yīng)該寫在 HTTPS 的 443 配置中:

另外,也可以全局配置基礎(chǔ)認(rèn)證,然后排除一些域。即該端口下,除被排除的域,所有的請(qǐng)求都需要輸入用戶名和密碼進(jìn)行認(rèn)證,詳細(xì)配置見官方文檔;
3. 添加賬戶
// 進(jìn)入相關(guān)文件夾
cd /etc/nginx/realmdir
// 文件名:htpasswd,用戶名:user 密碼password
htpasswd -bdc htpasswd user password
其中 htpasswd 需要和上一步中的文件名匹配,意思是在 htpasswd 這個(gè)文件中搜索賬戶是否匹配;
可以在一個(gè)文件中配置多個(gè)賬戶:

4. 重啟Nginx
nginx -s -reload
效果:

官方文檔:
https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/