

摘 要:Nginx是一款時下非常流行的輕量級網頁服務器和反向代理服務器,具有許多其他同類產品所不具備的優點。本文開發了一個基于Nginx的圖書館遠程授權訪問系統,實際應用表明該系統具有配置簡潔、用戶界面友好以及擴展模塊功能強大等優點,值得高校圖書館推廣使用。
關鍵詞:Nginx 反向代理;遠程授權訪問;數字資源
基金項目:湖州師范學院校級科研項目(2014XJKY39)
近年來,隨著云計算、大數據等熱點技術的迅速崛起,高校圖書館數字資源建設也取得了突飛迅猛的發展,許多高校開始建設各種綜合型或專業化數字圖書館來滿足師生讀者的多樣化數字閱讀需求。在這樣的大背景下,圖書館如何利用現有條件為校外讀者提供版權數字化資源便成了一個新的課題。構建圖書館遠程授權訪問系統是解決這個新課題的有效途徑之一。筆者借助本單位圖書館已有的軟硬件資源,搭建開發了一個基于Nginx的圖書館遠程授權訪問系統,該系統具有配置簡潔、客戶端界面友好以及擴展模塊功能強大等優點,報告如下。
1 系統開發與測試
1.1 系統運行軟件環境
(1)操作系統:CentOS 6.4 64bit
(2) 反向代理服務器:Nginx 1.4.1
(3)身份認證數據庫:MySql 5.0.77
(4)身份認證模塊:PAM-Mysql
1.2 遠程訪問模塊搭建
(1)編譯并安裝Nginx,編譯前注意添加www用戶組和組內用戶www,編譯時加上身份認證模塊ngx_http_auth_pam,正則表達式模塊(URL重寫)pcre,替換模塊
nginx_substitutions_filter以及用于安全連接的openssl模塊,編譯完成之后使用
iptables命令將需要訪問的端口加入到防火墻例外之中。
(2)修改nginx配置文件nginx.conf實現對數據庫的遠程訪問[1],配置修改如下:
location / {
proxy_pass http://DATABASE URL;
subs_fliter DATABASE ADDRESS1 LOCAL ADDRESS1;
……
subs_fliter DATABASE ADDRESSn LOCAL ADDRESSn;
rewrite REGULAREXPRESSION1 REPLACEMENT 1;
……
rewrite REGULAREXPRESSIONn REPLACEMENT n;
}
其中,proxy_pass是nginx自帶的反向代理命令,可以將外部對目標虛擬主機特定端口的訪問反向代理至對http://DATABASE URL的訪問;sub_fliter是實現網頁中文本替換的第三方Nginx模塊,主要用于解決數據庫地址中含有多個子域名時容易跳出反向代理服務器問題,相比官方自帶的substitution替換模塊,sub_fliter可以同時替換多于一條的文本字符串;rewrite模塊是nginx的URL重寫模塊,它可以通過正則表達式匹配來替換滿足特定條件的URL字符串,在此案例中用來解決部分數據庫在子域名之間的跳轉問題,同時,rewrite模塊不能對數據庫站點中其他同級別的二級子域名下的URL進行重寫,因此需要sub_fliter的配合使用。
當需要同時配置多個數據庫時,可以通過創建偵聽不同端口的虛擬主機來實現對不同數據庫的反向代理訪問,同樣,許多存在二級子域名的數據庫也可以對各個二級子域名分配不同的反向代理虛擬主機來進行管理。
1.3 身份認證模塊搭建
Nginx反向代理服務器可以通過自帶的HttpAuthBasicModule模塊來實現基于HTTP基本認證的身份認證方式,使用它可以零編碼實現一個用戶認證體系,但是同時這種認證方式有一個明顯的缺點,就是使用明文的htpasswd文件方式來存儲用戶名密碼,不僅在安全性方面大打折扣,也為以后需要頻繁更新用戶數據造成了不小的困擾,因此,一種新的認證方法應運而生:PAM,它使用主流數據庫軟件來存儲用戶名密碼,而不是htpasswd文件。
1.3.1安裝軟件
ngx_http_auth_pam在Nginx編譯安裝時已經作為第三方模塊加載。下載并編譯安裝pam-mysql。
1.3.2 模塊配置
(1) 配置Mysql
Mysql主要用來存儲授權用戶的用戶名和密碼,因此需要建一個數據庫和一張表,然后配置訪問Mysql的賬號:
create database pam_nginx_user;
use pam_nginx_user;
create table nguser ( userid varchar(18),password varchar(30), primary key (userid)) ;
執行完上面語句之后,得到:
庫:pam_nginx_user
表:nguser
字段:userid, password
(2) 配置pam-mysql[2]
在/etc/pam.d/下建一個文本文件nginx-mysql-pam,并輸入以下內容:
auth required /lib/security/pam_mysql.so
host=localhost db=pam_nginx_user table=nguser usercolumn=userid passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so
host=localhost db=pam_nginx_user table=nguser usercolumn=userid passwdcolumn=password crypt=2
(3) 配置Nginx,修改nginx.conf文件
server {
listen PortNumber;
server_name DomainName.com;
location / {
auth_pam "mysql pam";
auth_pam_service_name "nginx-mysql-pam”;
root /…/;
}
}
1.4 系統測試
登陸Mysql后,在pam_nginx_user數據庫中的nguser表中插入一條用于增加用戶名密碼的記錄:insert into nguser values (‘pamuser,password(‘123456)),并訪問Nginx反向代理服務器監聽的Web端口,出現如下圖的對話框:
輸入賬號密碼,進入主頁面,提示訪問成功,如下圖所示:
2 系統特點
本文開發的遠程授權訪問系統解決了筆者所在學校圖書館部分數字資源的遠程獲取問題。筆者所在學校教職工原來在非校園網獲取本校圖書館購買的數字版權資源需要登錄學校VPN,而VPN需要插件安裝,更新,瀏覽器兼容性等一些列問題,而反向代理服務由于是純基于瀏覽器訪問的形式,因此無需考慮插件問題,僅僅需要一個兼容版的網頁瀏覽器就能實現數字資源的遠程訪問和獲取。
本文開發的遠程授權訪問系統采用pam數據庫的形式進行身份認證,相比一些采用Nginx HTTP Auth Basic模塊的遠程授權訪問系統[3],具有安全性高,可維護性強等優點,用戶名密碼加密后保存在Mysql數據庫中,相比Nginx HTTP Auth Basic模塊用htpasswd文件明文存儲用戶名密碼在配置文件中,大大提高了安全性,也從很大程度上降低了以后的用戶群體維護成本。
本文開發的遠程授權訪問系統主要存在2點不足之處:第一,用戶界面過于簡單,期待通過后期版本的迭代開發來豐富各種功能,完善用戶體驗;第二,一些大型數據庫如CNKI等出于商業利益,對反向代理技術有所屏蔽,導致不能通過該系統來實現數字資源的遠程訪問和獲取。
3 討論
隨著知識爆炸時代的來臨,信息和資源的數量迅猛增多,圖書館資源的數字化也成為未來圖書館發展趨勢之一。在各大高校數字圖書館的建設中,遠程授權訪問系統的建設成為其中一項不可或缺的獲取數字資源的手段。目前國內各大高校圖書館采用的遠程授權訪問系統主要有以下3種:(1)SSL VPN系統。采用此類方案首先需要采購SSL VPN的硬件設備,并將其搭內在內網環境之中,通過配套的身份認證軟件,讀者便可以很方便地通過各種終端的瀏覽器來對校內授權數字資源進行讀取,這種方案優點在于讀者在通過身份認證之后便可以像在校園網內部一樣通過不同的瀏覽器來獲取所有可用的數字資源,缺點在于前期需要價格不菲的硬件和軟件的投入,而沒有充分利用已有的服務器和網絡資源[4]。(2)易瑞遠程授權訪問系統。易瑞遠程授權訪問系統由北京英富森信息技術有限公司開發,以流式重寫與端口映射的方式,實現公共圖書館、高校和科研機構圖書館電子資源的授權與館(校)外訪問;以電子資源管理與導航的模式,實現對讀者及資源的靈活授權控制,并提供強大的統計功能。缺點是需要一定的軟件授權費用,而且對每一個期刊數據庫都需要配置,它使用不同的虛擬主機目錄來區分不同的期刊數據庫。(3)Ezproxy系統。該系統屬于一款網頁代理服務器,與易瑞遠程授權訪問系統類似,它集成了簡單的身份認證功能,也同樣需要對每一個期刊數據庫進行配置,并使用不同的服務器端口來區分不同的期刊數據庫,同時軟件的授權需要一定費用。
Nginx是一款面向性能設計的HTTP服務器,由俄羅斯程序員Igor Sysoev開發,它能夠作為HTTP,HTTPS,SMTP,POP3以及IMAP協議的反向代理服務器,同時又能用來作為網頁負載均衡服務器或是HTTP緩存服務器,可以運行在Microsoft Windows、UNIX、GNU/Linux、BSD、Mac OS X、Solaris、AIX、HP-UX等操作系統中。Nginx以類似BSD協議的條款來發行,因而也屬于自由開源軟件。類似于Apache網頁服務器的事件模型,Nginx使用異步事件驅動方式來處理請求,它的模塊化的事件驅動架構在高負載情況下能夠提供更好的可以預見的性能提升。在Linux操作系統下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系統下效率相當高。同時Nginx在OpenBSD或FreeBSD操作系統上采用類似于epoll的高效事件模型kqueue[5]。Nginx整體采用模塊化設計,甚至HTTP服務器核心功能也是一個模塊,這是Nginx的一個重大特點。Nginx帶有豐富的模塊庫和第三方模塊庫,配置靈活。
本文基于開源軟件Nginx和現有服務器資源,自建了圖書館遠程授權訪問系統,實現了帶授權認證的反向代理服務器功能。從運行效果來看,該系統具有以下優點:用戶界面友好,使用方便快捷;配置靈活,開發成本低;能夠合理利用現有的軟硬件資源,實現資源節約。因此,筆者認為,基于Nginx的圖書館遠程授權訪問系統值得推廣運用。
參考文獻
[1] 張宴. 實戰Nginx[M]. 北京:電子工業出版社, 2010.
[2] 周軍宏. Centos7中支持虛擬用戶vsftpd 服務的配置[J].電腦知識與技術,2015,11(30):41-42.
[3] 宿大東. 采用Nginx 遠程訪問圖書館內網數字資源[J]. 內蒙古科技與經濟,2013, (13),69-70.
[4] 尋大勇. SSL VPN網絡安全技術的應用研究[J]. 通信技術,2009,(1),248-252.
[5] 陶輝. 深入理解Nginx[M]. 北京:機械工業出版社, 2013.
作者簡介
葉見春,館員,學士,從事數字圖書館建設、維護與開發。