最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯捷在他的<STL源码剖析>的自序里说过,“追踪一流作品并于其中吸取养分,远比自己关起门来写个三流作品,价值高得多”.我个人比较喜欢<深入理解Nginx>这本书,它讲解的很全面,相关的知识都会有所介绍,整体的脉络比较明晰.只是涉及东西比较多,有时真希望纸质文档也能像在线lxr那样给结构体…
本文是对陶辉<深入理解Nginx>第5章内容的梳理以及实现,代码和注释基本出自此书. 一.upstream:以向nginx服务器的请求转化为向google服务器的搜索请求为例 (一)模块框架 首先要明确的是,这里是编写一个使用upstream的模块,而不是编写upstream模块.因此,和HelloWorld类似,模块结构体ngx_http_mytest_module.模块上下文结构体ngx_http_mytest_module_ctx.数组ngx_http_mytest_command[].…
一.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章"配置项的使用"时又有成见:不就是各种琐碎…
前言: 最近在部署项目时要求实现负载均衡,有趣的是发现网上一搜全部都是以下类似的配置文件 upstream localhost{ server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=1; } server { listen 80; server_name localhost; location / { proxy_pass http://localhost; index index.html index.htm index.j…
如何理解Nginx, WSGI, Flask(Django)之间的关系 值得指出的是,WSGI 是一种协议,需要区分几个相近的名词: uwsgi 同 wsgi 一样也是一种协议,uWSGI服务器正是使用了 uwsgi 协议 uWSGI 实现了 uwsgi 和 WSGI 两种协议的web服务器.注意 uWSGI 本质上也是一种 web服务器,处于上面描述的三层结构中的 web服务器层. CGI 通用网关接口,并不限于 Python 语言,定义了 web服务器是如何向客户端提供动态的内容.例如,规定…
原文:https://book.2cto.com/201304/19622.html 本章介绍了Nginx的特点以及在什么场景下需要使用Nginx,同时介绍了如何获取Nginx以及如何配置.编译.安装运行Nginx.本章还深入介绍了最为复杂的configure过程,这部分内容是学习本书第二部分和第三部分的基础.…
原文:https://book.2cto.com/201304/19623.html Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能.使用这些模块时,仅仅需要增加.修改一些配置项即可.因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的语法格式.运行所有Nginx服务必须具备的基础配置以及使用HTTP核心模块配置静态Web服务器的方法,最后还会介绍反向代理服务器. 通过本章的学习,读者可以:熟练地配置一个静态Web服务器:对影响Web服…
原文:https://book.2cto.com/201304/19609.html 人们在了解新事物时,往往习惯通过类比来帮助自己理解事物的概貌.那么,我们在学习Nginx时也采用同样的方式,先来看看Nginx的竞争对手-Apache.Lighttpd.Tomcat.Jetty.IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相应地也都具备Web服务器的基本功能:基于REST架构风格,以统一资源描述符(Uniform Resource Identifier,…
原文:https://book.2cto.com/201304/19630.html 有些模块允许在配置项中使用变量,如在日志记录部分,具体示例如下.log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $bytes_sent "$http_referer" '                      '&quo…