`
ycsk
  • 浏览: 153868 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Nginx module of URL authorization

阅读更多
根据业务需要,对用户请求的进行认证,Nginx根据URL中的ID取出memcached的值,并与URL中的authkey对比认证。需要用到第三方库libmemcached。
在config中增加:
CORE_LIBS="$CORE_LIBS -L/byread/bin/libmemcached/lib -lmemcached"


具体实现:

#include <libmemcached/memcached.h>


static ngx_int_t
ngx_http_sukai_authorize_handler(ngx_http_request_t *r)
{
		ngx_http_sukai_authorize_loc_conf_t *conf;
        conf = ngx_http_get_module_loc_conf(r, ngx_http_sukai_authorize_module);
        if(conf->enable) {
			memcached_st *mcd;
			memcached_return_t rc;
			ngx_uint_t vlen;
			uint32_t flag;
			char *val = NULL;
			memcached_server_st *servers;
			mcd = memcached_create(NULL);
			servers = memcached_server_list_append(NULL,"127.0.0.1",11211,&rc);
			rc = memcached_server_push(mcd,servers);
			char byid[18];
			char authkey[128];
			char realuri[128];
			char prekey[] = "book_auth_";
			sscanf((char *)r->uri.data,"/%[0-9]/%[0-9a-z]%s",byid,authkey,realuri);
			val = memcached_get(mcd,strcat(prekey,byid),strlen(byid) + strlen(prekey),&vlen,&flag,&rc);
			if (val == NULL || ngx_strcmp(authkey, val) != 0) {
				return NGX_HTTP_NOT_ALLOWED;
			}
			r->uri.len = strlen(realuri);
			char* pRealUrl = (char*)malloc(strlen(realuri) + 1);
			strcpy(pRealUrl ,realuri);
			r->uri.data = (u_char *)pRealUrl;
			r->valid_unparsed_uri = 0;
			//rc = memcached_set(mcd,"realuri2",8,(char *)r->uri.data,r->uri.len,(time_t)180,(uint32_t)0);
			//rc = memcached_delete(mcd,prekey,strlen(prekey),(time_t)0);
			memcached_server_free(servers);
			memcached_free(mcd);
			if (NULL != val) free(val);
        } else {
			char byid[18];
			char authkey[128];
			char realuri[128];
			sscanf((char *)r->uri.data,"/%[0-9]/%[0-9a-z]%s",byid,authkey,realuri);
			r->uri.len = strlen(realuri);
			char* pRealUrl = (char*)malloc(strlen(realuri) + 1);
			strcpy(pRealUrl ,realuri);
			r->uri.data = (u_char *)pRealUrl;
			r->valid_unparsed_uri = 0;
		}
        return NGX_OK;
}

分享到:
评论

相关推荐

    Nginx上配置Basic Authorization登录认服务证的教程

    关于Basic Authorization 在HTTP中,Basic Authorization基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。 在发送之前是以用户名追加一个冒号然后串接...

    nginx-module-vts.tar.gz

    Nginx-Module-VTS是Nginx的一个增强模块,主要功能是提供详细的Web服务器访问统计和性能监控。Prometheus是一款流行的开源监控和警报工具,广泛用于收集和分析各种系统的指标。在本场景中,Nginx-Module-VTS与...

    fastdfs-nginx-module-正版V1.19-亲测可用 .zip

    4. 配置FastDFS和Nginx:配置FastDFS的连接参数,如tracker服务器地址,以及Nginx的服务器配置,如URL映射规则。 5. 启动和测试:启动Nginx服务,进行文件上传和下载的测试,确保一切正常。 在运维层面,FastDFS-...

    fastdfs-nginx-module_v1.16.tar.gz源码包,nginx支

    配置Nginx的配置文件,包括设置FastDFS的连接参数、URL重写规则等,以实现Nginx与FastDFS的交互。 5. **使用场景**:这个插件适用于那些使用FastDFS作为存储系统的网站或应用,可以提高文件访问性能,简化架构,...

    fastdfs-nginx-module-1.24

    《FastDFS-Nginx-Module 1.24:高效文件服务器集成详解》 FastDFS-nginx-module 1.24 是一个针对 FastDFS 文件系统的 Nginx 模块,它使得 Nginx 可以无缝地与 FastDFS 集成,提供了高效的文件上传、下载服务。这一...

    fastdfs-nginx-module_master.zip

    3. 配置Nginx的配置文件,添加FastDFS-nginx-module的相关指令,如`fdfs_tracker_server`和`http_server_url`,指定FastDFS的Tracker服务器地址和文件访问URL前缀。 4. 启动Nginx,测试文件上传和下载功能是否正常。...

    fastdfs-nginx-module1.20

    2. **URL路径格式**:FastDFS-Nginx-Module识别特定的URL格式,例如`/group1/M00/00/00/wKgFQFwGz0iAYZjWAAJZo6s2D7840.jpg`,其中`group1`是文件组名,`M00`是存储节点标识,`00/00`是文件所在的目录,`wKgFQFwGz0...

    fastdfs-nginx-module-1.22.zip

    安装完成后,配置Nginx的配置文件,添加FastDFS-Nginx-Module的相关指令,如`location`块中的`fastdfs_mod`,并设置URL路径规则。 实际应用中,FastDFS-Nginx-Module提供了丰富的API接口,可以方便地在Web应用中...

    Nginx如何配置url_hash转发方式.docx

    在本文中,我们将深入探讨如何在Nginx服务器上配置URL哈希(url_hash)转发方式,这是一种负载均衡策略,用于将特定的URL请求路由到特定的后端服务器。这种配置适用于需要根据URL保持会话状态的应用场景,比如动态...

    lua-nginx-module-0.10.13

    Lua-Nginx-Module,简称lua-nginx-module,是Nginx服务器的一个重要扩展模块,它将强大的Lua脚本语言集成到Nginx中,允许用户在Nginx配置文件中直接编写Lua代码,极大地增强了Nginx的功能性和灵活性。版本0.10.13是...

    nginx module开发指南(中文版)

    ### Nginx Module 开发详解 #### 模块的角色与功能 Nginx 的模块扮演着不同的角色,这些角色共同确保了服务器能够高效且灵活地处理 HTTP 请求。 1. **Handlers** (处理器): 这些模块负责处理 HTTP 请求并构造响应...

    headers-more-nginx-module-0.34

    《headers_more_nginx_module_0.34:深入解析Nginx扩展模块的增强功能》 在Web服务器领域,Nginx以其高性能、高并发能力而广受赞誉。而headers_more_nginx_module作为Nginx的一个扩展模块,进一步提升了其在处理...

    fastdfs-nginx-module-1.20.zip

    本文将详细解析如何将FastDFS的Nginx模块(fastdfs-nginx-module-1.20.zip)安装并配置到Nginx中,实现高效、稳定的服务。 首先,确保你已经安装了FastDFS和Nginx的基础环境。FastDFS提供了数据存储和文件管理的...

    fastdfs-nginx-module.zip

    在这个场景下,`fastdfs-nginx-module.zip`扮演着关键的角色,它是FastDFS与Nginx之间的重要桥梁。 FastDFS通常与Nginx结合使用,Nginx作为一个强大的反向代理和负载均衡服务器,负责接收HTTP请求,然后将这些请求...

    nginx-module-vts-0.1.18.tar.gz

    解压之后安装如下:mv nginx-module-vts-0.1.18 /usr/local/ yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel cd /usr/local/nginx/nginx-1.13.7 ./configure --add-module=/...

    Nginx Module Extension

    ### Nginx Module Extension #### 知识点一:Nginx 概述与特性 - **Nginx**:一款高性能的Web服务器和反向代理服务器,以其稳定性、丰富的功能集、简单的配置文件和低资源消耗而闻名。 - **高性能**:能够处理大量...

    fastdfs-nginx-module-master.zip

    这个模块使得Nginx可以直接解析FastDFS的URL,将文件请求转发到相应的FastDFS服务器上,返回文件内容。安装FastDFS-Nginx模块时,需要将源码编译并添加到Nginx的配置文件中,然后重新加载或重启Nginx使配置生效。 ...

    echo-nginx-module-0.58.tar.gz

    《深入理解echo-nginx-module与Nginx的协同工作》 在Web服务器的世界里,Nginx以其高性能、高并发的特性受到了广泛的关注。而为了更好地优化和调试Nginx的配置,开发者们开发了一系列的模块,其中echo-nginx-module...

    nginx-sticky-module-1.25.zip

    nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=...

    fastdfs-nginx-module_v1.16.tar.gz

    《深入解析fastdfs-nginx-module_v1.16.tar.gz:构建高效文件服务器的利器》 在现代互联网应用中,文件存储与传输是不可或缺的一部分。FastDFS作为一个轻量级、高性能的分布式文件系统,因其简单易用、稳定可靠的...

Global site tag (gtag.js) - Google Analytics