nginx模块开发

开发Nginx模块Helloworld

无人久伴 提交于 2020-01-13 13:56:27
本文是对《深入理解Nginx》一书中的实例进行实战时的记录。 1模块目录结构 my_test_module/ ├── config └── ngx_http_mytest_module.c 1.1配置文件 config文件内容如下: ngx_addon_name=ngx_http_mytest_module HTTP_MODULES="$HTTP_MODULESngx_http_mytest_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS$ngx_addon_dir/ngx_http_mytest_module.c" 1.2模块源码 ngx_http_mytest_module.c中的内容如下: #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r) { // Only handle GET/HEAD method if (!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD))) { return NGX_HTTP_NOT_ALLOWED; } // Discard request body ngx_int_t

开发Nginx模块Helloworld

一笑奈何 提交于 2020-01-13 05:47:43
本文是对《深入理解Nginx》一书中的实例进行实战时的记录。 1模块目录结构 my_test_module/ ├── config └── ngx_http_mytest_module.c 1.1配置文件 config文件内容如下: ngx_addon_name=ngx_http_mytest_module HTTP_MODULES="$HTTP_MODULESngx_http_mytest_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS$ngx_addon_dir/ngx_http_mytest_module.c" 1.2模块源码 ngx_http_mytest_module.c中的内容如下: #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r) { // Only handle GET/HEAD method if (!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD))) { return NGX_HTTP_NOT_ALLOWED; } // Discard request body ngx_int_t

Nginx 高级配置

早过忘川 提交于 2020-01-11 18:38:55
目录 Nginx 高级配置 Nginx 状态页 Nginx 第三方模块 Nginx 变量使用 内置变量 自定义变量 Nginx 自定义访问日志 自定义默认格式日志 自定义json格式日志 json格式的日志访问统计 Nginx 压缩功能 https 功能 ssl 配置参数 自签名 证书 Nginx证书配置 实现多域名HTTPS 关于favicon.ico 安全选项 隐藏Nginx版本号: 升级OpenSSL版本: Nginx 高级配置 Nginx 状态页 基于nginx模块ngx_http_auth_basic_module实现,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误。 配置示例: [root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf location /nginx_status { # 这项值是什么访问后面的uri就加什么。 stub_status; allow 192.168.0.0/16; # 只允许这个网段查看 allow 127.0.0.1; # 只允许本机查看 deny all; # 拒绝所有 } # 最后的意思就是允许192.168.0.0/16、127.0.0.1(本机)其他的都拒绝。 # 重新加载服务 [root

nginx源码解析之常用数据结构

不问归期 提交于 2020-01-11 15:56:07
  1、基础数据结构(src/core目录)   1)ngx_list_t(ngx_list.h) typedef struct ngx_list_part_s ngx_list_part_t; // 描述链表的一个元素(数组) struct ngx_list_part_s { void *elts; // 数组的起始地址 ngx_uint_t nelts; // 数组当前已使用了多少容量 ngx_list_part_t *next; // 下一个链表元素ngx_list_part_t的地址 }; typedef struct { ngx_list_part_t *last; // 指向链表的最后一个数组元素 ngx_list_part_t part; // 链表的首个数组元素 size_t size; // 存储的每个数据的字节数必须小于或等于size ngx_uint_t nalloc; // 每个ngx_list_part_t数组的容量 ngx_pool_t *pool; // 链表中管理内存分配的内存池对象 } ngx_list_t; // 描述整个链表   相关接口:   ngx_list_create(): 创建新的链表。   ngx_list_init(): 初始化一个已有的链表。返回 NGX_OK 表示成功,返回 NGX_ERROR 表示失败。   ngx_list

nginx入门与实战

十年热恋 提交于 2020-01-11 15:32:22
nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧。我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。 Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。 目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序 2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。 Nginx 程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市 场,但 Nginx 最被认可的还当是系统资源消耗低且并发能力强,因此得到了国内诸如新浪、 网易、腾讯等门户站的青睐。 web服务器和web框架的关系 web服务器(nginx, apache, lighthttp, IIS):接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据, web服务器不和数据库打交道 web框架

什么是Nginx?

蹲街弑〆低调 提交于 2020-01-10 14:47:07
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能。 大家好,我是IT修真院上海分院一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务三,扩展思考中的知识点——Nginx是什么? 1 背景介绍 1.1 web服务器 Nginx 的竞争对手—Apache、Lighttpd、Tomcat、 Jetty、IIS,它们都是 Web 服务器,或者叫做 WWW(World Wide Web)服务器,相应地 也都具备 Web 服务器的基本功能 :基于 REST 架构风格 ,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟 通依据,通过 HTTP 为浏览器等客户端程序提供各种网络服务。然而,由于这些 Web 服务器 在设计阶段就受到许多局限,例如当时的互联网用户规模、网络带宽、产品特点等局限,并 且各自的定位与发展方向都不尽相同,使得每一款 Web 服务器的特点与应用场合都很鲜明。 对比: 1.2 web服务器对比 Tomcat 和 Jetty 面向 Java 语言,先天就是重量级的 Web 服务器,它的性能与 Nginx 没 有可比性

nginx安装

笑着哭i 提交于 2020-01-10 07:34:09
一. Nginx在Linux下的安装 重新准备一台虚拟机作为服务器 oneinstack 1 环境准备 (1)需要安装 gcc 的环境【此步省略】 yum install gcc-c++ 2 第三方的开发包。【此步省略】 PCRE PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。 yum install -y pcre pcre-devel 注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。 n zlib zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。 yum install -y zlib zlib-devel OpenSSL OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。 yum

nginx性能优化调优之google-perftools

守給你的承諾、 提交于 2020-01-09 20:29:44
什么是google-perftools? google-perftools是google公司开发的一款针对 C/C++ 程序的性能分析开源工具,使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析 google-perftools包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,其中我们本次需要的一个工具TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情况下很好的控制内存的使用 运维为什么要使用google-perftools? 使用google开发的google-perftools优化nginx和mysql的内存分配效率和速度,帮助在高并发的情况下控制内存的使用。但是,nginx的内存占用其实是很少的,一个进程占用的内存大概只有12M左右,所以google-perftools对nginx的优化效果可能不太明显 什么是TCMalloc工具? 上面已经说过TCMalloc是google-perftools的一个工具与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程序上提高了服务器在高并发情况下的性能,从而降低系统的负载如何为Nginx添加TCMalloc库支持,要安装TCMalloc库

nginx性能优化调优之google-perftools

柔情痞子 提交于 2020-01-09 20:23:18
什么是google-perftools? google-perftools是google公司开发的一款针对 C/C++ 程序的性能分析开源工具,使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析 google-perftools包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,其中我们本次需要的一个工具TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情况下很好的控制内存的使用 运维为什么要使用google-perftools? 使用google开发的google-perftools优化nginx和mysql的内存分配效率和速度,帮助在高并发的情况下控制内存的使用。但是,nginx的内存占用其实是很少的,一个进程占用的内存大概只有12M左右,所以google-perftools对nginx的优化效果可能不太明显 什么是TCMalloc工具? 上面已经说过TCMalloc是google-perftools的一个工具与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程序上提高了服务器在高并发情况下的性能,从而降低系统的负载如何为Nginx添加TCMalloc库支持,要安装TCMalloc库

Nginx源码分析-启动初始化过程(一)

筅森魡賤 提交于 2020-01-09 04:11:09
Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。下面具体看一下main函数为Nginx的启动过程做了哪些初始化方面的事情。 main函数做的第一件事情就是对参数选项进行处理,和普通的Linux程序如出一辙,如下: if (ngx_get_options(argc, argv) != NGX_OK) { return 1; } if (ngx_get_options(argc, argv) != NGX_OK) { return 1; } Nginx用此函数对参数选项进行解析,从而采取相应的动作,比如:显示版本、测试配置等功能。其实此函数实现的很简陋,远没有Linux提供的getopt()那么强悍,但却可以达到跨平台的目的。 ngx_time_init(); (NGX_PCRE) ngx_regex_init(); if ngx_pid = ngx_getpid(); log = ngx_log_init(ngx_prefix); if (log == NULL) { return 1; } ngx_time_init(); #if (NGX_PCRE) ngx