環境:
CentOS7
Nginx 1.16.0
Nginx的訪問控制實現中存在如下兩種方式:
基於IP的訪問控制 : http_access_module
基於用戶的信任登錄 : http_auth_basic_module
1. http_access_module
配置語法:
Syntax: allow address | CIDR | unix: | all;
Default: ——
Context: http, server, location, limit_except
address: IP地址
CIDR: 網段
UNIX: socket
all: 允許所有
Syntax: deny address | CIDR | unix: | all;
Default: ——
Context: http, server, location, limit_except
與allow相反,即不允許
實踐:
對配置文件進行修改, 保存重啓nginx。
當用瀏覽器訪問/
訪問/test.html
即本地無權訪問/test.html
access的侷限性: 如果訪問並不是由客戶端直接訪問服務端, 而是通過代理進行訪問, 那麼僅僅識別ip是無法有效的進行限制的。
一種解決辦法, 採用別的http頭信息進行控制,如 x_forwarded_for,但不一定所有的代理都會存在該頭信息,並且可能存在該信息被修改的情況:
另外: 可以結合GEO模塊
還可以用http自定義變量傳遞
2.http_auth_basic_module
配置語法:
Syntax: auth_basic string | off;
Default: auth_basic off;
Context: http, server, location, limit_except
string 所填的字符串非off即爲開啓, 且會作爲提示出現
Syntax: auth_basic_user_file file;
Default: ——
Context: http, server, location, limit_except
file 用來存儲認證所用用戶名密碼的文件路徑
實踐:
首先生成存儲用戶名密碼的文件
查看一下:
接下來編輯配置文件:
保存退出後檢查語法, 重啓nginx服務
瀏覽器訪問/test.html, 有如下畫面:
輸入之前設置的賬戶密碼後即可查看到頁面
若不輸入則返回401錯誤
同樣, 這種驗證方式也存在許多侷限性, 操作繁瑣,更改麻煩
當然也有幾種解決方式:
- Nginx結合LUA實現高效驗證
- Nginx和LDAP打通,利用nginx-auth-ldap模塊