查看: 2418|回复: 6

[原创] [fireprime]+Nginx

[复制链接]
  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-11-8 14:57:52 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 suoma 于 2015-11-8 22:24 编辑

    Nginx模块概述

    Nginx的模块不能够像Apache那样动态添加,所有的模块都要预先编译进Nginx的二进制可执行文件中。
    Nginx模块有三种角色:
    (1)Handlers(处理模块)–用于处理HTTP请求并输出内容。
    (2)Filters(过滤模块)–用于过滤Headler输出的内容。
    (3)Load-balancers(负载均衡模块)–当有多台服务器供选择时,选择一台后端服务器并将HTTP请求转发到该服务器。

    hello world模块编写与安装

    (1)执行以下命令,在该目录内编写我们的Nginx模块:
    mkdir -p /opt/nginx_hello_world
    cd /opt/nginx_hello_world
    (2)开始创建nginx模块所需的配置文件(名为config)
    vim /opt/nginx_hello_world
    然后输入以下内容保存并退出:

    1. ngx_sddon_name=nginx_http_hello_world_module
    2. HTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module"
    3. NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c"
    4. CORE_LIBS="$CORE_LIBS -lpcre"
    复制代码

    (3)创建Nginx的模块c程序文件(格式为“ngx_http_模块名称_module.c”,本例中为:ngx_http_hello_world_module.c)
    vim /opt/nginx_hello_world/ngx_http_hello_world_module.c

    1. #include <ngx_config.h>
    2. #include<ngx_core.h>
    3. #include<ngx_http.h>

    4. static char *ngx_http_hello_world(ngx_conf_t *cf,ngx_command_t *cmd,void *conf);

    5. static ngx_command_t ngx_http_hello_world_commands[]={
    6. {
    7. ngx_string("hello_world"),
    8. NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
    9. ngx_http_hello_world,
    10. 0,
    11. 0,
    12. NULL
    13. },
    14. ngx_null_command
    15. };

    16. static u_char ngx_hello_world[]="hello world";
    17. static ngx_http_module_t ngx_http_hello_world_module_ctx ={
    18. NULL,
    19. NULL,

    20. NULL,
    21. NULL,

    22. NULL,
    23. NULL,

    24. NULL,
    25. NULL
    26. };
    27. ngx_module_t ngx_http_hello_world_module ={
    28. NGX_MODULE_V1,
    29. &ngx_http_hello_world_module_ctx,
    30. ngx_http_hello_world_commands,
    31. NGX_HTTP_MODULE,
    32. NULL,
    33. NULL,
    34. NULL,
    35. NULL,
    36. NULL,
    37. NULL,
    38. NULL,
    39. NGX_MODULE_V1_PADDING
    40. };

    41. static ngx_int_t ngx_http_hello_world_handler(ngx_http_request_t *r)
    42. {
    43. ngx_buf_t *b;
    44. ngx_chain_t out;

    45. r->headers_out.content_type.len = sizeof("text/plain") - 1;
    46. r->headers_out.content_type.data = (u_char *)"text/plain" ;

    47. b= ngx_pcalloc(r->pool,sizeof(ngx_buf_t));

    48. out.buf =b;
    49. out.next =NULL;

    50. b->pos=ngx_hello_world;
    51. b->last =ngx_hello_world +sizeof(ngx_hello_world);
    52. b->memory =1;
    53. b->last_buf =1;

    54. r->headers_out.status = NGX_HTTP_OK;
    55. r->headers_out.content_length_n =sizeof(ngx_hello_world);
    56. ngx_http_send_header(r);

    57. return ngx_http_output_filter(r,&out);
    58. }
    59. static char *ngx_http_hello_world(ngx_conf_t *cf,ngx_command_t *cmd, void *conf)
    60. {ngx_http_core_loc_conf_t *clcf;
    61. clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
    62. clcf->handler = ngx_http_hello_world_handler;
    63. return NGX_CONF_OK;

    64. }
    复制代码

    (4)参考我的nginx安装那一篇Nginx安装博客在这一步稍有不同
    **./configure –prefix=/usr/local/nginx –add-module=/opt/nginx_hello_world
    make&&make install**
    (5)配置nginx.conf(/usr/local/nginx/conf/nginx.conf),在server部分增加以下内容:
    **location = /hello{
    hello_world;
    }**
    (6)启动Nginx,(Nginx的启动),用浏览器访问http://localhost/hello,就可以看到编写的Nginx Hello World 模块输出的文字“hello world”。


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-11-8 15:04:19 | 显示全部楼层
    1 ngx_sddon_name=nginx_http_hello_world_module
    2 HTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module"
    3 NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c"
    4 CORE_LIBS="$CORE_LIBS -lpcre"
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-11-8 15:05:16 | 显示全部楼层
    1~78
    #include <ngx_config.h>
    #include<ngx_core.h>
    #include<ngx_http.h>

    static char *ngx_http_hello_world(ngx_conf_t *cf,ngx_command_t *cmd,void *conf);

    static ngx_command_t ngx_http_hello_world_commands[]={
    {
    ngx_string("hello_world"),
    NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
    ngx_http_hello_world,
    0,
    0,
    NULL
    },
    ngx_null_command
    };

    static u_char ngx_hello_world[]="hello world";
    static ngx_http_module_t ngx_http_hello_world_module_ctx ={
    NULL,
    NULL,

    NULL,
    NULL,

    NULL,
    NULL,

    NULL,
    NULL
    };
    ngx_module_t ngx_http_hello_world_module ={
    NGX_MODULE_V1,
    &ngx_http_hello_world_module_ctx,
    ngx_http_hello_world_commands,
    NGX_HTTP_MODULE,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NGX_MODULE_V1_PADDING
    };

    static ngx_int_t ngx_http_hello_world_handler(ngx_http_request_t *r)
    {
    ngx_buf_t *b;
    ngx_chain_t out;

    r->headers_out.content_type.len = sizeof("text/plain") - 1;
    r->headers_out.content_type.data = (u_char *)"text/plain" ;

    b= ngx_pcalloc(r->pool,sizeof(ngx_buf_t));

    out.buf =b;
    out.next =NULL;

    b->pos=ngx_hello_world;
    b->last =ngx_hello_world +sizeof(ngx_hello_world);
    b->memory =1;
    b->last_buf =1;

    r->headers_out.status = NGX_HTTP_OK;
    r->headers_out.content_length_n =sizeof(ngx_hello_world);
    ngx_http_send_header(r);

    return ngx_http_output_filter(r,&out);
    }
    static char *ngx_http_hello_world(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_http_hello_world_handler;
    return NGX_CONF_OK;

    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-11-8 21:17:50 | 显示全部楼层
    这个格式看的真蛋疼
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-11-8 22:25:16 | 显示全部楼层
    brucehelen 发表于 2015-11-8 21:17
    这个格式看的真蛋疼

              已改
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 09:10
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-11-9 08:59:18 | 显示全部楼层
    看看,学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-3-17 13:05
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2015-11-9 09:14:00 | 显示全部楼层
    感谢分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-27 09:21 , Processed in 0.167818 second(s), 27 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.