nginx 部分编译参数解析,http/tcp动态加载upstream准备

本文详细介绍Nginx的高级编译参数配置,包括http_ssl_module等模块的启用,以及如何通过添加第三方模块如lua-nginx-module增强Nginx功能。同时,提供了合并nginx-upsync模块的具体步骤。

一.编译参数

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --add-module=/opt/nginx/nginx-upsync --add-module=/opt/nginx/echo-nginx-module-0.61 --add-module=/opt/nginx/ngx_devel_kit-0.3.0 --add-module=/opt/nginx/lua-nginx-module-0.10.9rc7 --with-stream

参数解析:

--prefix=/usr/local/nginx :指的是工作根目录,当编译跟安装完了之后,nginx的工作子目录以及文件会自动生成在根目录下面。

--with-http_ssl_module :http的一个支持模块,nginx自带的,但是需要手动开启。

--with-http_flv_module : 提供服务端伪流媒体支持,nginx自代的,需要手动开启。

--with-http_stub_status_module :nginx的统计模块,nginx自代的,需要手动开启。

--with-http_gzip_static_module : 扩展压缩模块,nginx自代的,需要手动开启。

--with-http_realip_module :获取真实IP模块,nginx自代的,需要手动开启。

--add-module=/opt/nginx/nginx-upsync :nginx-upsync模块,里面包含了nginx-stream-upsync-module模块跟nginx-upsync-module模块,nginx-stream-upsync-module是支持在stream模块里面,给tcp/udp连接提供动态加载upstream配置的模块;而nginx-upsync-module模块是支持在http模块里面,给http请求提供动态加载upstream配置的模块。我这里是把两个模块合并到一起了,然后统一使用nginx-upsync模块添加到nginx中。
(合并过程写到后面)

--add-module=/opt/nginx/echo-nginx-module-0.61 :echo模块,可以在nginx中直接使用 echo 函数输出字符串返回给请求端。

--add-module=/opt/nginx/ngx_devel_kit-0.3.0 :ngx_devel_kit是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。这里就是用来配合lua模块使用的。

--add-module=/opt/nginx/lua-nginx-module-0.10.9rc7 :lua模块,支持在ngxin中使用lua脚本,很强大。

--with-stream :开启stream模块,让ngxin支持tcp/udp的代理。

二.合并nginx-upsync模块过程

1.下载源文件

git clone https://github.com/CallMeFoxie/nginx-upsync.git

cd nginx-upsync

git clone https://github.com/xiaokai-wang/nginx-stream-upsync-module.git

git clone https://github.com/weibocom/nginx-upsync-module.git

好像这样就合并完了。。。如果过程中提示冲突或者是否覆盖什么的,直接覆盖就完事儿了。nginx-upsync的路径就是上面--add-module=/opt/nginx/nginx-upsync中的路径。

参考文档:https://github.com/CallMeFoxie/nginx-upsync

### Nginx 源代码结构解析 Nginx 的源代码结构设计以模块化为核心,强调高可扩展性和良好的性能表现。其整体结构分为核心模块和功能模块两大部分。核心模块负责事件处理、进程管理、配置解析等基础功能,而功能模块则实现具体的业务逻辑,例如 HTTP、邮件代理、流媒体等功能。 Nginx 的源代码目录通常包括以下几个主要部分: - `src/core`:核心通用功能,包括内存管理、数据结构、日志等。 - `src/event`:事件驱动模型,支持 epoll、kqueue、select 等多种 I/O 多路复用机制。 - `src/os`:操作系统适配层,包含 Linux、FreeBSD、Solaris 等不同系统的适配代码。 - `src/http`:HTTP 模块相关代码,包括请求解析、响应生成、负载均衡、缓存等。 - `src/mail`:邮件代理模块,支持 IMAP、POP3、SMTP 等协议。 - `src/stream`:流式传输模块,用于实现 TCP/UDP 代理。 - `src/modules`:内置模块源代码,如 `ngx_http_rewrite_module`、`ngx_http_gzip_module` 等。 Nginx 的模块化设计允许开发者通过添加自定义模块来扩展功能。模块源代码通常需要包含一个 `config` 文件,用于定义模块的编译方式。在执行 `configure` 脚本时,使用 `--add-module=PATH` 参数可以将自定义模块加入编译流程中 [^2]。 ### Nginx 开发框架 Nginx 的开发框架围绕模块化机制构建,每个模块都有明确的生命周期和接口规范。模块的结构通常包括: - 模块定义结构体 `ngx_module_t` - 模块上下文结构体(如 `ngx_http_module_t`) - 指令数组(`ngx_command_t`),用于定义模块支持的配置项 - 初始化函数和事件处理函数 模块的开发流程包括: 1. 定义模块结构和配置指令 2. 实现模块的初始化和事件处理逻辑 3. 编写 `config` 文件并将其与模块源码放在同一目录 4. 使用 `--add-module` 参数将模块加入 Nginx 编译过程 [^2] 模块的配置解析由配置上下文 `ngx_conf_t` 控制,其中 `cf->module_type` 和 `cf->cmd_type` 分别用于指定模块类型和配置级别。例如,在 HTTP 模块中,`NGX_HTTP_MAIN_CONF` 表示解析 `http{}` 块中的配置 [^3]。 以下是一个简单的模块结构示例: ```c #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static ngx_int_t ngx_http_my_module_init(ngx_conf_t *cf); static void *ngx_http_my_module_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_my_module_merge_loc_conf(ngx_conf_t *cf, void *prev, void *conf); static ngx_command_t ngx_http_my_module_commands[] = { { ngx_string("my_module"), NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, ngx_conf_set_flag_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_my_module_loc_conf_t, enable), NULL }, ngx_null_command }; static ngx_http_module_t ngx_http_my_module_ctx = { NULL, /* preconfiguration */ ngx_http_my_module_init, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ NULL, /* create server configuration */ NULL, /* merge server configuration */ ngx_http_my_module_create_loc_conf, /* create location configuration */ ngx_http_my_module_merge_loc_conf /* merge location configuration */ }; ngx_module_t ngx_http_my_module = { NGX_MODULE_V1, &ngx_http_my_module_ctx, /* module context */ ngx_http_my_module_commands, /* module directives */ NGX_HTTP_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ NULL, /* init thread */ NULL, /* exit thread */ NULL, /* exit process */ NULL, /* exit master */ NGX_MODULE_V1_PADDING }; ``` ### Nginx 模块组成 Nginx 的模块系统由多种模块组成,主要包括以下几类: - **核心模块(Core Modules)**:提供基础功能,如事件处理、配置解析、线程管理等。 - **HTTP 模块(HTTP Modules)**:处理 HTTP 请求和响应,常见的模块包括 `ngx_http_core_module`、`ngx_http_log_module`、`ngx_http_upstream_module` 等。 - **Mail 模块(Mail Modules)**:用于实现邮件代理功能,如 `ngx_mail_core_module`。 - **Stream 模块(Stream Modules)**:用于实现 TCP/UDP 代理,如 `ngx_stream_core_module`。 - **第三方模块(Third-party Modules)**:由社区或企业开发,用于扩展 Nginx 功能,如 `ngx_cache_purge`、`ngx_pagespeed` 等。 每个模块都可以通过定义 `ngx_module_t` 结构体来注册到 Nginx 的运行环境中,并通过 `ngx_command_t` 数组定义配置项。模块的加载和初始化由 Nginx 内核统一管理 [^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值