nginx

  • 最近看了下nginx源码。有点头大。首先是我没用过nginx,第二是我不会c语言。

    因此想借着看nginx源码学习下c语言。之所以学习nginx是因为nginx非常实用,而且代码写得好,并且已经有不少的源码分析博客。不会的话至少有个参考。

    nginx有模块这个概念,可以自定义模块,这是入口点。

    nginx模块的基本原理我总结了一下,基本就是靠用函数当参数,在特定地方调用函数。

    写过js的一定对这个非常熟悉。因为js的cps风格就是不断的用函数做参数进行回调的。

    nginx也可以叫回调,反正也是基于epoll和kqueue的嘛。

    学习了一下c,发现c实现回调函数是用函数指针的。整个nginx使用

  • 今天尝试写一个模块

    ngx_http_module_t

    这里面初始化所有8个成员全部是函数指针,同样是可选的,用NULL放弃使用回调。

    create_loc_conf

    此函数接受的参数是ngx_conf_t *, 也就是nginx配置结构体的指针

    返回结果会被放在ctx->loc_conf[mi]中,mi是module index的缩写

    返回一个有字符串和整数的结构体,

    作用是告诉总的配置文件, 我需要一个啥结构体, 保存哪些信息

    这个函数貌似不重要..不管了

    merge_loc_conf

    可以不写,和上面一样,没啥用

    ngx_command_t

    struct ngx_command_s
  • 哎,说起这两天nginx的学习, 还是毫无进展, 上次我还吹牛说要写个静态服务器模块, 现在看来纯属扯淡.

    nginx实在是复杂, 一个最简单的模块, 比如就是接管路径访问一个hello吧, 就要至少70多行.相比起express, 不过3行, 实在差距太大.

    而且不少人说nginx代码写的好,我实在是看不出来,一个函数长的不行,却还是看不出啥意思.相比express的源码, 每次看都觉得酷毙了, 就应该这么写.

    不过我对nginx有心理障碍也难怪, 几天前我根本不会c, 现在也等于不会, 看起来吃力是必然的.

    写的太少是最大的问题, nodejs够简单了吧, 那个简单http服务器的例子,

  • 记录一些常用的 nginx.conf 片段, 虽然最好的文档始终是 http://nginx.org/en/docs/

    几个基本点

    nginx 的配置层级, http > server > location

    nginx 的一条配置格式为 directive value1 value2;, 如 listen 80;, listen 是 directive, 80 是 参数

    directive 可以理解为函数, value1 value2 就是他的参数, 可以看出 nginx 的配置都是按空白分隔的, 我个人喜欢用单个空格, 你也可以用 tab, 句末有分号, directive 有其

  • 今天尝试写一个模块

    ngx_http_module_t

    这里面初始化所有8个成员全部是函数指针,同样是可选的,用NULL放弃使用回调。

    create_loc_conf

    此函数接受的参数是ngx_conf_t *, 也就是nginx配置结构体的指针

    返回结果会被放在ctx->loc_conf[mi]中,mi是module index的缩写

    返回一个有字符串和整数的结构体,

    作用是告诉总的配置文件, 我需要一个啥结构体, 保存哪些信息

    这个函数貌似不重要..不管了

    merge_loc_conf

    可以不写,和上面一样,没啥用

    ngx_command_t

    struct ngx_command_s