apache來(lái)實(shí)現(xiàn)基本的用戶身份認(rèn)證有很多種方式,比如最常見(jiàn)的txt文本和dbm格式,但在負(fù)載很重的server上-這些都不是理想的方法,文本的形式是基于平面的,性能很差而且也不安全;dbm好些但在千或萬(wàn)級(jí)用戶時(shí)還是力不從心,于是用database做后臺(tái)存儲(chǔ)則是很好的方法-比平面搜索更有效而且安全,用戶口令以des加密形式存儲(chǔ)在數(shù)據(jù)庫(kù)的表中。
這種實(shí)現(xiàn)要?dú)w功于apache本身出色的模塊化結(jié)構(gòu)--以及開(kāi)放的dso方式,可以使開(kāi)發(fā)人員完成大量的第三方模塊,并擴(kuò)充apache的功能。我在本文中只寫(xiě)了用mysql做后臺(tái)存儲(chǔ)--此外還可用postgresql,oracle等來(lái)完成,原理一樣-都是用各自的模塊。
讓我們開(kāi)始吧--先去modules.apache.org找到mod_auth_mysql--會(huì)有兩個(gè)我們要用dso那個(gè)-事實(shí)上直接去ftp://ftp.kcilink.com/pub/下一個(gè)mod_auth_mysql.c.gz就行-好-把它解開(kāi)是一個(gè)mod_auth_mysql.c-好-我們用apxs來(lái)生成dso模塊(前題是你用dso模式編譯的apache)--apxs -c -i -a -l/usr/local/lib/mysql -lmysqlclient >-lm mod_auth_mysql.c即可--這里注意一定要這么寫(xiě)---l/usr/local/lib/mysql是mysql的客戶庫(kù)位置,我假定mysql是用的缺省安裝)---如果不加在起動(dòng)apache時(shí)會(huì)報(bào)錯(cuò)-無(wú)法裝載此模塊。
好了看看httpd.conf中應(yīng)該有l(wèi)oadmodule mysql_auth_module libexec/mod_auth_mysql.so和addmodule mod_auth_mysql.c這兩句了,重起apache也不應(yīng)該有問(wèn)題。
然后我們進(jìn)入mysql,mysql>create database auth;
|
注意字段名一定是user_name和user_passwd這個(gè)。再插入幾條記錄:
|
這里abcde是口令-用encrypt函數(shù)來(lái)進(jìn)行加密,用的是des算法-這是和unix的password等同的算法-而不是mysql本身加密的password()函數(shù)。
最后在要保護(hù)的目錄里建一個(gè).htaccess(別忘了把a(bǔ)llowoverride all打開(kāi))內(nèi)容如下:
|
可以把用戶都放在一個(gè)組里-只要是這個(gè)組里的用戶即可通過(guò)認(rèn)證,也可require單個(gè)或多個(gè)用戶。
新聞熱點(diǎn)
疑難解答
圖片精選