SlideShare a Scribd company logo
1 of 17
Nginx 使用和模块开发
Web 服务器
 Apache


 Tomcat


 Microsoft IIS


 Lighttpd


 Nginx

  ......
谁在用 Nginx




            ......
Nginx 的发展
Netcraft 的报告




    活跃网站: Nginx 的占有率达到了 12.18% ,比上月增长 0.57% ;
    所有网站: Nginx 的占有率达到 9.63%
Nginx 的优势
 epoll 模型,支持高并发连接




       使用 libevent 进行 epoll 、 kqueue 、 select 等网络 I/O 模型性能测试对
       比图
Nginx 的还能做什么

 反向代理



 负载均衡



 模块开发 -- 开发自己想要的功能
Nginx 的模块开发
 Nginx 模块主要有 3 种角色:


      • handlers( 处理模块 ) 用于处理 HTTP 请求,然后产生输
 出


      • filters (过滤模块) 过滤 handler 产生的输出


      • load-balancers (负载均衡模块)当有多于一台的后端备
 选服   务器时,选择一台转发 HTTP 请求
模块开发我们的需求
 Nginx 模块我们想得到:


     •     访问的 url , ip 地址等


     •     设置配置文件中的访问变量


     • ......
模块开发我们的需求
 安装 nginx 模块的一般步骤如下:


  1 、编写模块 config 文件和模块


  2 、编译安装


  3 、修改 nginx 的配置文件


  4 、启动 nginx
以 Empty Gif 模块为例
  config 文件

     ngx_addon_name=ngx_http_circle_gif_module
     HTTP_MODULES="$HTTP_MODULES ngx_http_circle_gif_module"
     NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_circle_gif_module.c"
     CORE_LIBS="$CORE_LIBS -lMagickWand"
     CFLAGS="$CFLAGS `MagickWand-config --cflags`"
ngx_http_circle_gif_module 模块

  配置文件中,参数的配置

  static ngx_command_t    ngx_http_circle_gif_commands[] = {

     { ngx_string("circle_gif"),
  NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
  ngx_http_circle_gif,
  NGX_HTTP_LOC_CONF_OFFSET,
  0,
  NULL },

  { ngx_string("circle_gif_min_radius"),

  ......




       ngx_null_command
  };
ngx_http_circle_gif_module 模块

url 等参数的获取

  static ngx_int_t

  ....
    digit = (char *)r->uri.data + r->uri.len - 1;
  if (!(*digit-- == 'f' && *digit-- == 'i' && *digit-- == 'g' && *digit-- ==
  '.'))
  {
  ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Invalid extension with
  %s", digit);
  return NGX_HTTP_NOT_FOUND;
    }

  ....
  }
编译

nginx 编译

      ./configure (如缺少 PCRE ,先安装)

安装
      sudo make
      sudo make install
      执行 curl -i http://localhost 或浏览器访问 http://localhost/
      就可以看到 welcome to nginx 的欢迎字幕 表示安装成功

      模块编译
      ./configure --prefix= 安装目录 --add-module= 模块源代码
      文件目录 --with-debug
      make
      sudo make install
配置文件的修改

 location /circles {
         circle_gif;
         circle_gif_min_radius 10 ;
         circle_gif_max_radius 20 ;
     }
启动 Nginx
  sudo   /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf




 其中 url 的格式如下:

 /circles/ffffff/000000/20.gif
 /circles/<background color>/<foreground color>/<size>.gif
模块是如何注册

在 nginx 代码的 auto 目录中,有一个名为 sources 的文件,根据编
译选项( configure 的参数)的不同, m4 宏变量 HTTP_MODULES
的值会发生变化:

如果指定了使用 empty gif 模块(默认就是使用了),则最终 m4 宏
变量 HTTP_MODULES 的值可能如下:

HTTP_MODULES="ngx_http_module /
      ngx_http_core_module /
      ngx_http_log_module /
      ngx_http_upstream_module /
      ngx_http_empty_gif_module "

注意:这里的 ngx_http_empty_gif_module 字符串对应了
ngx_http_empty_gif_module.c 文件中的 Module 主结构变量名。
第三方模块使用 --- 直接与 mysql 通信

  原文地址: http://ri0day.blogbus.com/logs/61820056.html

  需要的模块是 ( 两位中国人写的 ,taobao 的 ):
  http://github.com/chaoslawful/drizzle-nginx-module
  http://github.com/agentzh/rds-json-nginx-module

  [root@localhost conf]# curl http://127.0.0.1/mysql?2
  [{"id":2,"num":null},{"id":2,"num":"430922198610020038"},
  {"id":2,"num":"430922198610020037"},
  {"id":2,"num":"430922198610020034"}]



  在 http://wiki.nginx.org/3rdPartyModules 中有很多关于第三方模
  块的开发,国人 agentzh 在这方面做了大量的工作。

More Related Content

What's hot

使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理Lixun Peng
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011Yiwei Ma
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 phpronnywang_tw
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人Fred Chien
 
Varnish简介
Varnish简介Varnish简介
Varnish简介fangdeng
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋Lixun Peng
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事Ben Lue
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践Orangle Liu
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路taobao.com
 

What's hot (20)

Mvc
MvcMvc
Mvc
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
 
Varnish简介
Varnish简介Varnish简介
Varnish简介
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路
 

Similar to Nginx使用和模块开发

使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
Django development
Django developmentDjango development
Django developmentloveyudu
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡Cary Yang
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡guest2d0fe3
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版pigso
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejsChi-wen Sun
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架wtxidian
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)Chengjen Lee
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 

Similar to Nginx使用和模块开发 (20)

使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Django development
Django developmentDjango development
Django development
 
Kissy design
Kissy designKissy design
Kissy design
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 

Nginx使用和模块开发

  • 2. Web 服务器 Apache Tomcat Microsoft IIS Lighttpd Nginx ......
  • 4. Nginx 的发展 Netcraft 的报告 活跃网站: Nginx 的占有率达到了 12.18% ,比上月增长 0.57% ; 所有网站: Nginx 的占有率达到 9.63%
  • 5. Nginx 的优势 epoll 模型,支持高并发连接 使用 libevent 进行 epoll 、 kqueue 、 select 等网络 I/O 模型性能测试对 比图
  • 6. Nginx 的还能做什么 反向代理 负载均衡 模块开发 -- 开发自己想要的功能
  • 7. Nginx 的模块开发 Nginx 模块主要有 3 种角色: • handlers( 处理模块 ) 用于处理 HTTP 请求,然后产生输 出 • filters (过滤模块) 过滤 handler 产生的输出 • load-balancers (负载均衡模块)当有多于一台的后端备 选服 务器时,选择一台转发 HTTP 请求
  • 8. 模块开发我们的需求 Nginx 模块我们想得到: • 访问的 url , ip 地址等 • 设置配置文件中的访问变量 • ......
  • 9. 模块开发我们的需求 安装 nginx 模块的一般步骤如下: 1 、编写模块 config 文件和模块 2 、编译安装 3 、修改 nginx 的配置文件 4 、启动 nginx
  • 10. 以 Empty Gif 模块为例 config 文件 ngx_addon_name=ngx_http_circle_gif_module HTTP_MODULES="$HTTP_MODULES ngx_http_circle_gif_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_circle_gif_module.c" CORE_LIBS="$CORE_LIBS -lMagickWand" CFLAGS="$CFLAGS `MagickWand-config --cflags`"
  • 11. ngx_http_circle_gif_module 模块 配置文件中,参数的配置 static ngx_command_t ngx_http_circle_gif_commands[] = { { ngx_string("circle_gif"), NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS, ngx_http_circle_gif, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("circle_gif_min_radius"), ...... ngx_null_command };
  • 12. ngx_http_circle_gif_module 模块 url 等参数的获取 static ngx_int_t .... digit = (char *)r->uri.data + r->uri.len - 1; if (!(*digit-- == 'f' && *digit-- == 'i' && *digit-- == 'g' && *digit-- == '.')) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Invalid extension with %s", digit); return NGX_HTTP_NOT_FOUND; } .... }
  • 13. 编译 nginx 编译 ./configure (如缺少 PCRE ,先安装) 安装 sudo make sudo make install 执行 curl -i http://localhost 或浏览器访问 http://localhost/ 就可以看到 welcome to nginx 的欢迎字幕 表示安装成功 模块编译 ./configure --prefix= 安装目录 --add-module= 模块源代码 文件目录 --with-debug make sudo make install
  • 14. 配置文件的修改 location /circles { circle_gif; circle_gif_min_radius 10 ; circle_gif_max_radius 20 ; }
  • 15. 启动 Nginx sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中 url 的格式如下: /circles/ffffff/000000/20.gif /circles/<background color>/<foreground color>/<size>.gif
  • 16. 模块是如何注册 在 nginx 代码的 auto 目录中,有一个名为 sources 的文件,根据编 译选项( configure 的参数)的不同, m4 宏变量 HTTP_MODULES 的值会发生变化: 如果指定了使用 empty gif 模块(默认就是使用了),则最终 m4 宏 变量 HTTP_MODULES 的值可能如下: HTTP_MODULES="ngx_http_module / ngx_http_core_module / ngx_http_log_module / ngx_http_upstream_module / ngx_http_empty_gif_module " 注意:这里的 ngx_http_empty_gif_module 字符串对应了 ngx_http_empty_gif_module.c 文件中的 Module 主结构变量名。
  • 17. 第三方模块使用 --- 直接与 mysql 通信 原文地址: http://ri0day.blogbus.com/logs/61820056.html 需要的模块是 ( 两位中国人写的 ,taobao 的 ): http://github.com/chaoslawful/drizzle-nginx-module http://github.com/agentzh/rds-json-nginx-module [root@localhost conf]# curl http://127.0.0.1/mysql?2 [{"id":2,"num":null},{"id":2,"num":"430922198610020038"}, {"id":2,"num":"430922198610020037"}, {"id":2,"num":"430922198610020034"}] 在 http://wiki.nginx.org/3rdPartyModules 中有很多关于第三方模 块的开发,国人 agentzh 在这方面做了大量的工作。