Nginx源码分析(一)

2012年3月12日 niesongsong 没有评论



1.错误定义

分析源码从最简单的地方入手,首先来看nginx的错误码定义,代码在ngx_errno.h,ngx_errno.h文件中。一共就两个函数。

  1. u_char*ngx_strerror(ngx_err_terr,u_char*errstr,size_tsize);
  2. ngx_uint_tngx_strerror_init(void);

系统启动时会初始化全局变量ngx_sys_errlist,这是一个全局ngx_str_t数组,数组大小为NGX_SYS_NERR,每个元素都一个结构体为:

  1. typedefstruct{
  2. size_tlen;//data成员的大小
  3. u_char*data;//一个字符串
  4. }ngx_str_t;

初始化:ngx_uint_t ngx_strerror_init
所以初始化的函数是填充每一个元素,该元素的数组下标即为错误码,元素len成员是指元素data字符串的大小,data是该错误码(数组下标)的文字描述,通过函数strerror(err)来取得错误码的信息串。
获取错误码对应的信息串:ngx_strerror
在ngx_sys_errlist找到err对应位置的错误信息,如果错误码不在数组下标范围则返回未知错误,同时检查传入的长度,太小于将会截断错误信息串。



分类: Linux, Nginx 标签:

在windwos下的编译Nginx

2012年2月28日 niesongsong 没有评论


在windows下编译nginx可以利用VC编译来调试nginx,当我们很熟悉了操作系统上层的实现之后转向分析nginx代码也方便一些。
在windows下编译nginx跟在Linux下的步骤差不多。利用svn工具下载源码,第三方网站下载的tar文件中没有win32的配置文件;由于configure文件是sh脚本,所以只能用第三方仿真软件,我这里用的是MinGW Shell;配置完成后就是编译,只要调用VC的编译工具cl.exe编译就行了。

下载工具 需要的工具有: 1.TortoiseSVN:http://downloads.sourceforge.net/project/tortoisesvn/1.7.5/Application/TortoiseSVN-1.7.5.22551-win32-svn-1.7.3.msi 2.MinGW32:http://10.10.4.6/download/7377061/8602355/3/exe/230/40/1322227850470_40/mingw-get-inst-20111118.exe 3.VC2010 express:http://download.microsoft.com/download/e/5/e/e5e362e1-6a2a-4ce3-bbac-659c9740ab04/vc_web.exe 上面的工具下载安装完成即可。

下载源码
源码地址在:svn://svn.nginx.org/nginx/trunk 使用svn将源码检出到本地任意目录,比如f:\nginx\trunk
目录结构如下:
f—nginx—trunk—(auto conf contrib docs misc src)

配置代码环境
打开cmd命令行提示:



cmd



2.设置VC的环境变量:在命令提示符中键入命令(根据VC的安装目录不同而不同,x86为参数)



"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86



设置MinGW:在命令提示符键入命令(根据MinGW32安装目录不同而不同):



C:\MinGW\msys\1.0\msys.bat



检查环境:
弹出MinGW窗口,关闭其它的cmd窗口。在MinGW32的窗口输入:



cl.exe



有如下显示:
用于 80×86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.30319.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
用法: cl [ 选项... ] 文件名… [ /link 链接选项... ]
说明编译环境配置成功
编译
cd进入主目录,即truck目录



cd /f/nginx/trunk



配置:



./auto/configure --prefix=. --with-cc-opt="-D FD_SETSIZE=4096" --without-http_rewrite_module --without-http_gzip_module --with-cc=cl



注解:
–prefix=. 表示安装目录在本目录下
–with-cc-opt=”-D FD_SETSIZE=4096″ 预定义宏FD_SETSIZE大小4096
–without-http_rewrite_module 不加载rewite模块
–without-http_gzip_module 不加载gzip模块
–with-cc=cl 编译器为cl
编译:



nmake



在obj/目录下为生成的中间文件和nginx.exe文件。