APP下载

基于Nginx的图书馆远程授权访问系统开发

2016-09-26叶见春

卷宗 2016年7期
关键词:数字资源

摘 要: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.

作者简介

叶见春,馆员,学士,从事数字图书馆建设、维护与开发。

猜你喜欢

数字资源
山东省新建本科院校图书馆数字资源建设研究
浅谈数字资源在小学数学课堂的有效提高运用
美术教科书使用应把握的几个视角
图书馆员新角色
评价高校图书馆数字资源综合服务能力
新媒体时代的多元化阅读推广实践
利用数字资源优化语文童话教学研究