随笔分类 -  nginx源码分析

摘要:1 auto/types/sizeof该脚本的功能,是通过测试程序获知给定的ngx_type的大小。1.1 显示提示信息echo $ngx_n "checking for $ngx_type size ...$ngx_c"cat > $NGX_AUTOCONF_ERR----------------... 阅读全文
posted @ 2014-10-22 16:59 暗痛 阅读(446) 评论(0) 推荐(0)
摘要:回顾变量 CC最初是在auto/options脚本中初始化的:CC=${CC:-gcc}1 C Compiler 的 featureWindows 平台的编译器叫做MSVC,其他平台的都统称为C Compiler。1.1 获取编译器参数该脚本并不复杂,首先通过NGX_PLATFORM变量来判断是否是... 阅读全文
posted @ 2014-10-22 16:58 暗痛 阅读(601) 评论(0) 推荐(0)
摘要:在 Nginx 的自动脚本中,auto/cc目录下的所有脚本都是用于编译器相关配置使用的。Nginx的出色跨平台性(Linux、Darwin、Solaris、Win32 等)就有这些脚本的贡献。该目录下包含如下脚本:目录conf:主脚本,配置编译器的基本属性,并根据系统的编译器环境引用不同的脚本。n... 阅读全文
posted @ 2014-10-22 16:56 暗痛 阅读(479) 评论(0) 推荐(0)
摘要:目录auto/have 向自动配置头文件追加可用宏定义(objs/ngx_auto_config.h)auto/nohave 向自动配置头文件追加不可用宏定义(objs/ngx_auto_config.h)auto/define 向自动配置脚本追加 K-V 宏定义(objs/ngx_auto_con... 阅读全文
posted @ 2014-10-22 16:55 暗痛 阅读(665) 评论(0) 推荐(0)
摘要:在configure脚本中,运行完auto/options和auto/init脚本后,接下来就运行auto/soures脚本。这个脚本是为编译做准备的。目录核心模块事件模块OpenSSL 模块相关变量事件驱动模块操作系统相关项HTTP 模块邮件模块Google PerfTools 模块C++ 测试模... 阅读全文
posted @ 2014-10-22 16:54 暗痛 阅读(849) 评论(1) 推荐(1)
摘要:在configure中运行完auto/options脚本后,接着运行auto/init脚本,其中所做的工作如下。1 Makefile文件名变量默认情况下是:objs/Makefile代码如下:NGX_MAKEFILE=$NGX_OBJS/Makefile2 源文件名变量默认情况下是:objs/ngx... 阅读全文
posted @ 2014-10-22 16:50 暗痛 阅读(1399) 评论(0) 推荐(0)
摘要:在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件。这些工作是由自动脚本完成的。和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configure的文件。除了configure,其他的自动脚本都在auto目录下。通过分析configure脚本源... 阅读全文
posted @ 2014-10-22 16:49 暗痛 阅读(941) 评论(0) 推荐(0)
摘要:1 Backgroundngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息。默认情况下这个模块是不被编译进来的,所以在编译 Nginx 时要指定加载该模块:--with-http_stub_status_modu... 阅读全文
posted @ 2014-10-22 16:47 暗痛 阅读(534) 评论(0) 推荐(0)
摘要:1 命名规则1.1 基本变量基本变量有三个:ngx_module_t 类型的 ngx_http_foo_bar_module;ngx_command_t 类型的数组 ngx_http_foo_bar_commands;ngx_http_module_t 类型的 ngx_http_foo_bar_mo... 阅读全文
posted @ 2014-10-22 16:46 暗痛 阅读(522) 评论(0) 推荐(0)
摘要:还记得我们定义过一个结构体如下吗?typedef struct { ngx_str_t output_words;} ngx_http_hello_world_loc_conf_t;它就是 HelloWorld 的 location 组件配置,其中有一个字符串成员 output_words。1... 阅读全文
posted @ 2014-10-22 16:44 暗痛 阅读(976) 评论(0) 推荐(0)
摘要:elloWorld 是一个典型的 location 模块。什么是 location 模块?在 Nginx 中,根据作用域,有 main 模块、server 模块、location 模块。1 模块定义在 HelloWorld 模块中有一个 ngx_http_hello_world_module 变量,... 阅读全文
posted @ 2014-10-22 16:43 暗痛 阅读(1188) 评论(0) 推荐(0)
摘要:1 学习 Nginx 模块开发需要有哪些准备?需要的预备知识不多,有如下几点:有过一些 C 语言的编程经历;知道 Nginx 是干嘛的,并有过编写或改写 Nginx 的配置文件的经历。OK,就这两点就够了 :)好了,那就开始吧~2 我们的 HelloWorld 的目标是什么?我们的目标,就是你在浏览... 阅读全文
posted @ 2014-10-22 16:41 暗痛 阅读(942) 评论(0) 推荐(0)
摘要:Nginx 是多进程模式的,一个 master 与多个 workers,一般工作在多核 CPU 上,所以自旋锁就是必须用到的。Nginx 中的自旋锁的定义,位于 ngx_spinlock.c 中,如下:voidngx_spinlock(ngx_atomic_t *lock, ngx_atomic_i... 阅读全文
posted @ 2014-10-22 16:38 暗痛 阅读(741) 评论(0) 推荐(0)
摘要:ngx_radix_tree.h// 未被使用的节点#define NGX_RADIX_NO_VALUE (uintptr_t) -1typedef struct ngx_radix_node_s ngx_radix_node_t;struct ngx_radix_node_s { ng... 阅读全文
posted @ 2014-10-22 16:37 暗痛 阅读(476) 评论(0) 推荐(0)
摘要:本文分析 ngxin.c 中的 ngx_get_options 函数,其影响:nginx.c 中的:static ngx_uint_t ngx_show_help;static ngx_uint_t ngx_show_version;static ngx_uint_t ngx_show_... 阅读全文
posted @ 2014-10-22 16:35 暗痛 阅读(540) 评论(0) 推荐(0)
摘要:errno.h中的strerror(int errno)可以确定指定的errno的错误的提示信息。在 Nginx 中,将所有错误提示信息预先存储在一个数组里,而预先确定这个数组的大小,是在自动化脚本中完成的,如下是auto/unix脚本:(其中自动化脚本auto/feature的作用参考《解剖 Ng... 阅读全文
posted @ 2014-10-22 16:33 暗痛 阅读(838) 评论(0) 推荐(0)
摘要:ngx_palloc.h/* * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. * On Windows NT it decreases a number of locked pages in a ke... 阅读全文
posted @ 2014-10-22 16:32 暗痛 阅读(450) 评论(0) 推荐(0)
摘要:下面是摘自 Google Code 的 Murmurhash 开源项目主页上的 Murmurhash2,Nginx 就是采用的这个。uint32_t MurmurHash2 ( const void * key, int len, uint32_t seed ){ // 'm' and 'r' a... 阅读全文
posted @ 2014-10-22 16:30 暗痛 阅读(913) 评论(0) 推荐(0)
摘要:/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#include #include // 如果 CPU 架构是 i386 或 amd64,并且编译器是 GNU Compiler 或 Intel Compiler,则定义 cng... 阅读全文
posted @ 2014-10-22 16:28 暗痛 阅读(374) 评论(0) 推荐(0)
摘要:队列头文件ngx_queue.h#include #include #ifndef _NGX_QUEUE_H_INCLUDED_#define _NGX_QUEUE_H_INCLUDED_typedef struct ngx_queue_s ngx_queue_t;// 队列的节点,也直接表示队列... 阅读全文
posted @ 2014-10-22 16:27 暗痛 阅读(368) 评论(0) 推荐(0)