本文是对陶辉<深入理解Nginx>第5章内容的梳理以及实现,代码和注释基本出自此书. 一.upstream:以向nginx服务器的请求转化为向google服务器的搜索请求为例 (一)模块框架 首先要明确的是,这里是编写一个使用upstream的模块,而不是编写upstream模块.因此,和HelloWorld类似,模块结构体ngx_http_mytest_module.模块上下文结构体ngx_http_mytest_module_ctx.数组ngx_http_mytest_command[].…
该模块可以完成如下的功能,当我们输入http://你的ip/lcw?s_sh000001时,会使用subrequest方式得到新浪服务器上的上证指数,代码如下: //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191@qq.com //@brief: 使用subrequest方式访问第三方服务 #include <ngx_config.h>//包含必…
该模块可以完成如下的功能,当我们输入http://你的ip/lcwupstream时,会使用upstream方式访问淘宝搜索,打开淘宝搜索的主页面,代码如下: //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191@qq.com //@brief: 使用upstream方式访问第三方服务 #include <ngx_config.h>//包含必要的头…
nginx提供了两种全异步方式来与第三方服务通信,分别是upstream和subrequest. upstream:nginx为代理服务器,作消息透传.将第三方服务的内容原封不动的返回给用户. subrequest:为客户请求创建子请求.访问第三方服务只是为了获取某些信息,再根据这些信息构造响应返回给用户. upstream的使用方法 ngx_http_request_t中有一个ngx_http_upstream_t类型的成员upstream struct ngx_http_request_s…
参考资料<深入理解Nginx> Nginx可以当做一个强大的反向代理服务器,其反向代理模块是基于upstream方式实现的. upstream的使用方式 HTTP模块在处理任何一个请求时都有一个ngx_http_request_t结构对象r,而该对象又有一个ngx_http_upstream_t类型的成员upstream. typedef struct ngx_http_request_s ngx_http_request_t struct ngx_http_request_s { ... n…
最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯捷在他的<STL源码剖析>的自序里说过,“追踪一流作品并于其中吸取养分,远比自己关起门来写个三流作品,价值高得多”.我个人比较喜欢<深入理解Nginx>这本书,它讲解的很全面,相关的知识都会有所介绍,整体的脉络比较明晰.只是涉及东西比较多,有时真希望纸质文档也能像在线lxr那样给结构体…
一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_output_filter()发送HTTP包体时,才会由这两个方法一次调用所有的HTTP过滤模块来处理这个请求.HTTP过滤模块仅处理服务器发送到客户端的响应,而不处理客户端发往服务器的HTTP请求. 多个过滤模块的顺序的形成以及Nginx自带的过滤模块请参考原书. 二.编写一个HTTP过滤模块 以向…
前文链接:<深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld HelloWorld的完成意味着已经踏入了nginx的大门,虽然很振奋人心,但在编写中仍有很多疑惑的存在:nginx.conf的配置项中各个参数是如何读入程序中的?ngx_command_t如何完成配置项的读入工作?名称相同的配置项的冲突如何解决?HelloWorld中的ngx_http_module_t何以称为模块的上下文?同时我在读第4章"配置项的使用"时又有成见:不就是各种琐碎…
继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算方法,更是一种解决问题的新思维.新思路.将原先看似可以一条龙似的处理一刀切成两端,一端是Map.一端是Reduce,Map负责分,Reduce负责合. 1.MapReduce排序 问题模型: 给出多个数据文件输入如: sortfile1.txt 11 13 15 17 19 21 23 25 27…
WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义:   在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有帧,当它收到一个没有掩码的帧时,服务器必须关闭连接.不过服务器端给客户端发送的所有帧都不是掩码的,如果客户端检测到掩码的帧时,也一样必须关闭连接.当帧被关闭的时候,可能发送状态码1002(协议错误). 基本帧协议如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5…