1. 程式人生 > >Nginx詳解九:Nginx基礎篇之Nginx的訪問控制

Nginx詳解九:Nginx基礎篇之Nginx的訪問控制

proxy 頭信息 復制 拒絕訪問 ESS 用戶訪問 ima nginx基礎 com

基於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模塊

Nginx詳解九:Nginx基礎篇之Nginx的訪問控制