應用場景:大概是在内部網站需要外部使用者通路到,同時不能給通路者網站賬号權限,是以在 nginx 層面進行限制。例如外包項目,内部員工有賬号進行文檔的操作,外包員工沒有内部賬号,但需要讓他們能夠看到文檔,是以在 nginx 層面設定使用者驗證是最佳最簡單的選擇,多數情況下雇主方不會給外包員工開一個基礎通路權限的賬号。
在 nginx 層面進行進行使用者認證的前置條件:需要有對應的密碼建立程式,如
apache2-utils
(Debian,Ubuntu)或
httpd-tools
(RHEL / CentOS / Oracle Linux),不同作業系統是不同的軟體。
建立賬戶密碼檔案
- 使用指令
建立第一個賬戶,然後按下 Enter 鍵輸入密碼,同樣的指令,沒有sudo htpasswd -c /etc/apache2/.htpasswd user1
參數建立第二個使用者及密碼,-c
參數為建立檔案,在第二次及以後的指令中不需要再次建立檔案。-c
- 确認一下檔案及賬号資訊生成成功,使用指令
檢視檔案内容,應該為賬号及加密後的密碼,如:cat /etc/apache2/.htpasswd
等。user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
配置 nginx 進行 http 基礎使用者驗證
使用
auth_basic
指令指定設定受保護區域的名稱,此名稱會顯示在賬号密碼彈窗上,使用
auth_basic_user_file
指令設定帶有賬戶密碼資訊的
.htpasswd
路徑。例如配置:
location /api {
auth_basic "Administrator's Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
此外,如果某個區塊不想繼承整個認證體系,可以在區塊内設定
auth_basic off
,即使用者認證關閉狀态。例如配置:
server {
...
auth_basic "Administrator's Area";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
通過 ip 位址将認證與通路限制相結合
HTTP基本認證可以通過IP位址有效地與通路限制相結合。您可以實作至少兩種方案:
- 使用者需要通過身份驗證 并且 具有 ip 通路權限
- 使用者需要通過身份驗證 或者 具有 ip 通路權限
1.使用
allow
和
deny
指令來允許或限制指定 ip 的通路,例如配置:
location /api {
#...
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}
在
192.168.1.2
位址以外的網絡,僅授予
192.168.1.1/24
的通路權限。注意:
allow
和
deny
指令将按照定義的順序應用。
2.通過ip 和 http 身份驗證将限制與
satisfy
指令相結合。如果将指令設定為
all
,則在用戶端滿足這兩個條件時授予通路權限。如果将指令設定為
any
,則如果用戶端滿足至少一個條件,則授予通路權限,例如配置:
location /api {
#...
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator's Area";
auth_basic_user_file conf/htpasswd;
}
綜上可以組織成一個完整的例子:
http {
server {
listen 192.168.1.23:8080;
root /usr/share/nginx/html;
location /api {
api;
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator's area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
}
}
最終效果如圖:
以上内容希望幫助到大家, 很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴充、高性能、高并發、伺服器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點進階進階幹貨需要的可以免費分享給大家 ,需要請戳這裡連結 或 者關注咱們下面的知乎專欄
PHP架構師圈子zhuanlan.zhihu.com