基於IP的訪問控制:http_access_module
不允許指定網段的用戶訪問:
配置語法:deny address | CIDR | unix: | all;
默認狀態:-
配置方法:http、server、location、limit_except
把最原始的配置文件做好備份,並復制一份在這里,命名為:access_mod.cof
檢查語法並重載
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf
訪問到之前放在里面的頁面,說明配置成功
要參與測試的ip:
復制一個location進行配置
檢查語法並重載
訪問
換虛擬機訪問
只允許指定網段的用戶可以訪問:
配置語法:allow address | CIDR | unix: | all;
默認狀態:-
配置方法:http、server、location、limit_except
復制一個location進行配置
檢查配置是否成功,並重載
設置的ip訪問成功
未設置的ip訪問失敗
http_access_module的局限性:
由於此實現的原理是基於客戶端的ip來控制,但是nginx並不知道哪一個ip是真正的客戶的,如果客戶端與服務端的nginx之間還有一層代理(如其他的中間件),如對下圖的中對IP1訪問IP3做控制,此時IP1經過中間件后,放IP3發送的請求為IP2,即控制失敗,所以只能通過$remote_addr控制允許訪問,不能控制拒絕訪問
解決辦法:
方法一:采用別的HTTP頭信息控制訪問,如:HTTP_X_FORWARD_FOR
方法二:結合geo模塊作
方法三:通過HTTP自定義變量傳遞(推薦此方法)
http_x_forwarded_for:
http_x_forwarded_for是http頭信息協議規定要攜帶的內容,在IP2上面看到的是IP1的http_x_forwarded_for信息,在IP3上看到的是IP1,IP2的http_x_forwarded_for信息,所以http_x_forwarded_for可以看到通過所有代理的信
配置語法:http_x_forwarded_for=Client IP ,Proxy(1),Proxy(2)IP,...
基於用戶的信任登錄:http_auth_basic_module
配置語法:auth_basic string | off;
string:即表示開啟,有會在前端顯示這個字符串的信息,有也可以作為前端的登錄提示
默認狀態:auth_basic off;
配置方法:http、server、location、limit_except
配置語法:auth_basic_user_file filePath;
filePath:用來存儲用戶認證信息的文件
默認狀態:-;
配置方法:http、server、location、limit_except
官方文檔:http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
如果沒有的話需安裝,我這里已經安裝了
做好備份,並把配置文件命名為auth_mod.conf
在上一級目錄,用htpasswd命令生成一個名為./auth_conf的文件,並寫入一個用戶名和密碼,我這里設置的是admin,密碼111111
開始配置
檢查語法並重載
訪問,需輸入用戶名密碼
http_auth_basic_module 的局限性
一:用戶信息依賴文件方式
二:操作機械,效率低下
解決方案:
一:Nginx結合LUA實現高效驗證
二:Nginx和LDAP打通,利用nginx-auth-ldap模塊