Nginx模塊——訪問控制

環境:
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錯誤
在這裏插入圖片描述


同樣, 這種驗證方式也存在許多侷限性, 操作繁瑣,更改麻煩
當然也有幾種解決方式:

  1. Nginx結合LUA實現高效驗證
  2. Nginx和LDAP打通,利用nginx-auth-ldap模塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章