使用LDAP實(shí)現(xiàn)Nginx用戶認(rèn)證的示例
在互聯(lián)網(wǎng)運(yùn)維中,用戶認(rèn)證是個(gè)常見(jiàn)需求。LDAP(輕量級(jí)目錄訪問(wèn)協(xié)議)是一種集中管理用戶信息的工具,而 Nginx 則是高性能的反向代理服務(wù)器。將兩者結(jié)合,可以輕松實(shí)現(xiàn)基于 LDAP 的用戶認(rèn)證。
今天我們就來(lái)聊聊,如何用 Nginx 和 LDAP 實(shí)現(xiàn)用戶認(rèn)證,并通過(guò)實(shí)例一步步帶你實(shí)現(xiàn)這個(gè)功能。
為什么選擇 LDAP + Nginx?
- 統(tǒng)一用戶管理:LDAP集中管理用戶信息,避免多套系統(tǒng)重復(fù)維護(hù)。
- 高效穩(wěn)定:Nginx性能優(yōu)越,適合大并發(fā)場(chǎng)景。
- 簡(jiǎn)單易用:通過(guò)簡(jiǎn)單的配置即可完成認(rèn)證邏輯。
實(shí)現(xiàn)思路
- 用戶訪問(wèn)系統(tǒng)時(shí),Nginx要求輸入賬號(hào)和密碼。
- Nginx將用戶輸入的憑證轉(zhuǎn)發(fā)給 LDAP 服務(wù)器驗(yàn)證。
- 驗(yàn)證成功后,用戶可訪問(wèn)受保護(hù)的資源;失敗則拒絕訪問(wèn)。
使用工具
在實(shí)現(xiàn)中,我們會(huì)用到一個(gè) Nginx 第三方模塊:nginx-auth-ldap。這個(gè)模塊支持將用戶認(rèn)證請(qǐng)求發(fā)送到 LDAP 服務(wù)器,非常適合我們的需求。
環(huán)境準(zhǔn)備
環(huán)境信息:
- 操作系統(tǒng):Ubuntu 20.04
- LDAP 服務(wù)器:OpenLDAP(IP:
192.168.1.100
) - Nginx 版本:1.20+(需要編譯支持 nginx-auth-ldap 模塊)
安裝 Nginx 和 LDAP 模塊
1. 安裝必要組件
sudo apt update sudo apt install nginx libldap2-dev libpcre3-dev build-essential -y
2. 下載和編譯 Nginx
由于默認(rèn)安裝的 Nginx 不包含 nginx-auth-ldap
模塊,需要手動(dòng)編譯。
wget http://nginx.org/download/nginx-1.20.2.tar.gz tar -xzvf nginx-1.20.2.tar.gz cd nginx-1.20.2 # 下載 nginx-auth-ldap 模塊 git clone https://github.com/kvspb/nginx-auth-ldap.git # 配置和編譯 ./configure --add-module=./nginx-auth-ldap --prefix=/etc/nginx --with-http_ssl_module make sudo make install
配置 Nginx 實(shí)現(xiàn) LDAP 認(rèn)證
編輯 Nginx 配置文件,通常在 /etc/nginx/nginx.conf
,以下是示例配置:
http { # 定義 LDAP 服務(wù)器 ldap_server ldap_backend { url ldap://192.168.1.100:389/ou=users,dc=example,dc=com?uid?sub?(objectClass=posixAccount); binddn "cn=admin,dc=example,dc=com"; binddn_passwd "admin_password"; group_attribute memberUid; group_attribute_is_dn off; require valid_user; } server { listen 80; server_name example.com; # 為受保護(hù)資源啟用 LDAP 認(rèn)證 location /protected { auth_ldap "Restricted Area"; auth_ldap_servers ldap_backend; root /var/www/html; index index.html; } } }
配置解析
LDAP 服務(wù)器配置段
url
:指定 LDAP 服務(wù)器地址和過(guò)濾規(guī)則。ou=users
:指定搜索范圍為users
組織單元。uid
:用戶登錄時(shí)使用uid
屬性作為用戶名。sub
:表示遞歸搜索子節(jié)點(diǎn)。
binddn
:LDAP 管理員賬號(hào),用于驗(yàn)證時(shí)的搜索操作。binddn_passwd
:管理員賬號(hào)密碼。
受保護(hù)資源段
auth_ldap
:?jiǎn)⒂?LDAP 認(rèn)證,并設(shè)置認(rèn)證提示信息。auth_ldap_servers
:指定關(guān)聯(lián)的 LDAP 服務(wù)器。
啟動(dòng)服務(wù)并測(cè)試
重啟 Nginx保存配置后,執(zhí)行以下命令重啟 Nginx:
sudo nginx -s reload
訪問(wèn)測(cè)試
- 在瀏覽器中訪問(wèn)
http://example.com/protected
。 - 會(huì)彈出登錄框,輸入 LDAP 用戶名和密碼進(jìn)行測(cè)試。
- 認(rèn)證通過(guò)后,頁(yè)面顯示內(nèi)容;否則返回
401 Unauthorized
。
- 在瀏覽器中訪問(wèn)
測(cè)試示例
假設(shè) LDAP 用戶信息如下:
- 用戶名:
testuser
- 密碼:
testpassword
- 用戶位于:
ou=users,dc=example,dc=com
測(cè)試認(rèn)證流程
瀏覽器中輸入用戶名和密碼:
- 用戶名:
testuser
- 密碼:
testpassword
- 用戶名:
驗(yàn)證成功,瀏覽器正常加載頁(yè)面。如果失敗,請(qǐng)檢查 Nginx 日志。
檢查日志
Nginx 的日志文件通常位于 /var/log/nginx/error.log
,查看其中的 LDAP 認(rèn)證相關(guān)信息:
sudo tail -f /var/log/nginx/error.log
常見(jiàn)問(wèn)題
問(wèn)題 1:LDAP 無(wú)法連接
- 檢查服務(wù)狀態(tài):
sudo systemctl status slapd
- 測(cè)試連接:
ldapsearch -x -H ldap://192.168.1.100 -b "dc=example,dc=com"
問(wèn)題 2:認(rèn)證失敗
- 確保
binddn
和binddn_passwd
正確。 - 確認(rèn)
uid
屬性是否存在于 LDAP 用戶條目中。
總結(jié)
通過(guò) Nginx 和 LDAP 的結(jié)合,可以輕松實(shí)現(xiàn)集中化的用戶認(rèn)證。這種方案不僅安全高效,還能降低運(yùn)維管理成本,非常適合需要統(tǒng)一用戶管理的場(chǎng)景。
到此這篇關(guān)于使用LDAP實(shí)現(xiàn)Nginx用戶認(rèn)證的示例的文章就介紹到這了,更多相關(guān)Nginx LDAP用戶認(rèn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- nginx配置https的雙向認(rèn)證方式
- https如何通過(guò)nginx完成雙向認(rèn)證轉(zhuǎn)發(fā)
- Nginx配置Https安全認(rèn)證的實(shí)現(xiàn)
- Nginx+SSL實(shí)現(xiàn)雙向認(rèn)證的示例代碼
- 詳解Nginx SSL快速雙向認(rèn)證配置(腳本)
- nginx環(huán)境下配置ssl加密(單雙向認(rèn)證、部分https)
- Nginx中配置用戶服務(wù)器訪問(wèn)認(rèn)證的方法示例
- 使用Lua編寫Nginx服務(wù)器的認(rèn)證模塊的方法
- Nginx用戶認(rèn)證配置方法詳解(域名/目錄)
相關(guān)文章
HTTP 499 狀態(tài)碼 nginx下 499錯(cuò)誤的解決辦法
HTTP狀態(tài)碼出現(xiàn)499錯(cuò)誤有多種情況,499錯(cuò)誤是什么?Nginx 499錯(cuò)誤的原因及解決方法,下面跟著腳本之家小編一起學(xué)習(xí)吧2016-06-06Nginx 配置根據(jù)請(qǐng)求IP末段進(jìn)行分流的方法
這篇文章主要介紹了Nginx 配置根據(jù)請(qǐng)求IP末段進(jìn)行分流的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07教你快速構(gòu)建一個(gè)基于nginx的web集群項(xiàng)目
本文教你快速構(gòu)建一個(gè)基于nginx的4/7層負(fù)載均衡的web集群項(xiàng)目,項(xiàng)目步驟本文給大家介紹介紹,對(duì)nginx web集群項(xiàng)目感興趣的朋友一起看看吧2021-11-11NGINX阻止指定ip的請(qǐng)求問(wèn)題及解決方案
web頁(yè)面做了一個(gè)功能,在websocket請(qǐng)求失敗的情況,會(huì)定時(shí)向服務(wù)端進(jìn)行重試進(jìn)行建立連接,這篇文章給大家介紹NGINX阻止指定ip的請(qǐng)求問(wèn)題及解決方案,感興趣的朋友一起看看吧2024-02-02Nginx優(yōu)化設(shè)計(jì)方案小結(jié)
本文主要介紹了Nginx優(yōu)化設(shè)計(jì)方案小結(jié),幫助大家在nginx的使用和優(yōu)化中提供一個(gè)參考的方向,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05解決Nginx無(wú)法啟動(dòng) -10013: An attempt was
這篇文章主要給大家介紹了解決用nginx -t 發(fā)成Nginx無(wú)法啟動(dòng)報(bào)錯(cuò)10013: An attempt was made to access a socket in a way forbidden by its access permissions的問(wèn)題,需要的朋友可以參考下2023-11-11Nginx+iptables屏蔽訪問(wèn)Web頁(yè)面過(guò)于頻繁的IP(防DDOS,惡意訪問(wèn),采集器)
通過(guò)分析nginx的日志來(lái)過(guò)濾出訪問(wèn)過(guò)于頻繁的IP地址,然后添加到nginx的blockip.conf,并重啟nginx.2010-11-11