您的位置:首页 > 运维架构 > Nginx

windows平台下开发nginx模块(还添加了gzip模块)

2016-02-24 19:41 741 查看
开始前的小小说明:我把nginx源代码放在E:\nginx目录下,运行nginx的工作目录放在D:\nginx目录下。特此说明。
1.准备工作
下载并安装以下工具:
Vs2010,下载地址: http://download.microsoft.com/download/e/5/e/e5e362e1-6a2a-4ce3-bbac-659c9740ab04/vc_web.exe 
Mingw,下载地址:http://download.csdn.net/detail/kidleaf2/4568042#comment 
SVN客户端,下载地址: http://tortoisesvn.net/downloads.html 

2.获取nginx最新的源代码
使用SVN从svn://svn.nginx.org/nginx/trunk获取Nginx源代码,假设保存在e:\nginx目录。

具体方法可以参考:http://blog.csdn.net/chenyujing1234/article/details/7540320

3.编写一个简单模块代码
先创建模块目录e:\ngx_test_module,然后在模块目录下新建config文件(注意,此文件没有文件类型,文件名就叫做config),输入以下代码:
ngx_addon_name=ngx_test_module
HTTP_MODULES="$HTTP_MODULES ngx_test_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_test_module.c"

在模块目录下新建ngx_test_module.c文件,输入以下代码:
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h> 
static char *ngx_test(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
static ngx_command_t ngx_test_commands[] = {
    { ngx_string("test"),
      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_test,
      0,
      0,
      NULL },

    ngx_null_command
};
static ngx_http_module_t  ngx_test_module_ctx = {
    NULL,
    NULL,

    NULL,
    NULL,

    NULL,
    NULL,

    NULL,
    NULL
};
ngx_module_t ngx_test_module = {
    NGX_MODULE_V1,
    &ngx_test_module_ctx,
    ngx_test_commands,
    NGX_HTTP_MODULE,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NGX_MODULE_V1_PADDING
};
static ngx_str_t  ngx_test_type = ngx_string("text/plain");
static ngx_int_t
ngx_test_handler(ngx_http_request_t *r)
{
    ngx_http_complex_value_t  cv;

    if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
        return NGX_HTTP_NOT_ALLOWED;
    }

    ngx_memzero(&cv, sizeof(ngx_http_complex_value_t));

    ngx_str_set(&cv.value, "test!");

    return ngx_http_send_response(r, NGX_HTTP_OK, &ngx_test_type, &cv);
}
static char *
ngx_test(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_http_core_loc_conf_t  *clcf;

    clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
    clcf->handler = ngx_test_handler;

    return NGX_CONF_OK;
}
4.编译源代码及模块代码
编译过程有先后顺序,容易出错,我们分步骤来介绍。
第一步,打开电脑的DOS界面(开始菜单->运行->输入“cmd”),在其中输入"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 (注意:路径中要有双引号,具体的路径请参照自己电脑中vs2010的安装路径)。
第二步,依然在DOS中输入  C:\MinGW\msys\1.0\msys.bat  ,这样就进入 mingw 的Shell环境。
第三步,在mingw的shell中输入 cd e:\nginx 切换到Nginx源代码目录。(我的Nginx源代码放在e盘的nginx文件夹下)
第四步,在mingw的shell中紧接着输入如下编译命令:
    ./auto/configure --with-cc=cl --prefix= --without-http_rewrite_module --without-http_gzip_module --with-debug --add-module=../ngx_test_module
第五步,等待一会儿后,依然在mingw的shell中紧接着输入 nmake ,剩下时间就是耐心等待了。

5.运行nginx
在上面,我们编译完成后,会在e:\nginx\objs下面生成一个nginx.exe文件,这个文件就是我们之前辛辛苦苦努力的成果。如下是运行这个nginx.exe的步骤。
第一步,到D盘去新建一个文件夹nginx,路径为D:\nginx,并将上面编译得到的nginx.exe拷贝至该文目录中
第二步,在D:\nginx中新建conf和logs两个目录。
在conf目录新建nginx.conf文件,输入以下代码:
daemon  off;
master_process  off;
worker_processes  1;

#error_log  logs/error.log  debug;

events {
    use  select;
    worker_connections  128;
}

http {
    server {
        listen       80;
        server_name  localhost;
 
        location /test {
            test;
        }
    }
}

logs文件夹让它为空,不管。
第三步,新建一个DOS界面,将当前目录切换到D:\nginx,输入检查conf中nginx.conf文件格式正确性的命令:nginx -t,若成功会提示说什么successful之类的,否则就会failed,自己要去检查nginx.conf文件的格式正确性。
第四步,在上一步打开的DOS界面中,紧接着输入开启nginx的命令:start nginx.此时,你可以打开任务管理器,会发现进程中多了nginx.exe。保持DOS界面不关闭,等会儿关闭nginx还要用到它呢
第五步,打开浏览器访问http://localhost/test,网页中会显示出“test”的文字

第六步,如果想关闭nginx.exe,则在DOS界面中输入关闭命令:nginx -s stop

附:
添加gzip模块:
windows平台下如果想将gzip模块添加进nginx,则必须先弄到zlib源代码,然后通过静态编译的方式,把zlib源代码编译进nginx中。具体实现方法如下:
第一步,下载zlib源代码,到我写此文为止,最新的zlib版本为1.2.7,可以在http://download.csdn.net/detail/aaamo/4507243#comment 下载。或者在网上其他地方弄到也行。
第二步,将下载后的zlib-1.2.7.tar.gz解压到D:\nginx目录下,即为D:\nginx\zlib-1.2.7目录,该目录下都是zlib的源代码文件。
第三步,修改MinGW安装文件中的link.exe。我电脑中MinGW安装在C:\MinGW目录下,所以我在C:\MinGW\msys\1.0\bin目录下,搜索出“link.exe”该文件,将该文件文件名改动下,我把它重命名为:link_fuck.exe。必须改名的原因:因为已经指定了Microsoft
Visual Studio的编译器,两个link.exe同时存在的话会优先选择MinGW,由于支持并不是很完善,会导致编译失败或者有问题。(切记此条)
第四步,然后就可以照着前面介绍编译nginx模块的步骤开始依序进行。需要改动的是,在前文的“4.编译源代码及模块代码”的编译命令中添加"--with-zlib=./zlib-1.2.7 "若不加上此条编译命令,gzip模块还是不能够添加进去。
第五步,照着前文的编译模块的步骤编译完后,可以查看E:\nginx\objs\ngx_modules.c的内容,里面记录着该次编译中添加的模块,可以判断自己以上操作是否正确添加上了gzip模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx 添加模块