最近在读陶辉的《深入理解Nginx:模块开发与架构解析》,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节。侯捷在他的《STL源码剖析》的自序里说过,“追踪一流作品并于其中吸取养分,远比自己关起门来写个三流作品,价值高得多”。我个人比较喜欢《深入理解Nginx》这本书,它讲解的很全面,相关的知识都会有所介绍,整体的脉络比较明晰。只是涉及东西比较多,有时真希望纸质文档也能像在线lxr那样给结构体和函数的使用处和定义做一个超链接,这样来回跳转查阅不会太麻烦。纸上得来终觉浅,绝知此事要躬行,读书的时候自然少不了实际地动手。这个系列的博文便是对学习过程的梳理和动手过程的记录。不过虽希望成“系列”,限于时间和精力,以及对nginx刚刚上手,我很难保证下一篇什么时候能写好,还请谅解。

  另外,原书对实际动手时遇到的一些细节问题已有提及,我便不再赘述。如无特殊提示和说明,代码均为原书上的代码。

一、安装与配置

  首先需要安装Nginx要用到或者可能用到的软件:GCC、pcre、zlib、OpenSSL。由于原书使用yum直接安装,我又懒得在旧版(10.04)的Ubuntu下折腾安装包,因此直接搞了个Fedora19虚拟机也就能直接用yum了。虽然看上去也挺麻烦,其实也不过是下下ISO镜像、配配vim、搞个文件共享而已,轻车熟路。另外要注意的是:

我的Fedora19不带fastest-mirror,最好先装下这个yum的插件,不然后面的下载可能会慢死人不偿命;

如果系统不带C库手册,为了便于编码时查阅C库函数,请yum install man-pages。

  配置过程包括Linux内核参数优化(/etc/sysctl.conf)、Nginx源码配置(可以直接下载、解压、configure、make、make install)、nginx.conf的配置,照着原书上的来就是,nginx.conf的具体实践留给下文。不过你可以借机照着原书学学configure文件的写法,这可是Linux下的一项通用技能。

  另外为了方便使用,我建立了个软链接:先删除/usr/bin/nginx,然后ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx。

二、HelloWorld的实现

  Nginx封装了一些数据结构,了解下即可,马上就要用到。跟随第三章的思路,要知道如何将自己写的模块编译进Nginx:最简单且不易出错的方法是编写config文件,其中包括模块名称、所有的模块名称(使用递归赋值)、模块源代码路径,原书的例子:

config文件

  然后用C语言编写模块源码。书中介绍了几个数据结构和函数,经过梳理,它们的关系是这样的:

  它们完成任务的具体过程和编码实现原书上都有(一些数据传递如HTTP请求的解析、数据传递是由Nginx的HTTP框架完成的,在模块代码中并未体现),整合到源码的对应目录下(和config一致,这里是nginx-1.4.2/my_module/helloword/)的ngx_http_mytest_module.c文件中即可。记得添加头文件ngx_config.h、ngx_core.h和ngx_http.h:

ngx_http_mytest_module.c

  最后一步是修改nginx.conf配置,为http块中增加一个对应于mytest模块的location块:

location /test {mytest;
}

  这里有几点需要注意的,我在这里折腾了不少时间:

1.原书中写的是Location,其实应该是location;

2.如果之前make install过,此时修改源码的nginx.conf,那么只能复制到/usr/local/nginx/conf/nginx.conf.default,而不是nginx.conf,这时启动nginx是不能生效的。这一点可以从Makefile文件中推断出来,解决办法是make install后将nginx.conf.default覆盖nginx.conf,或者直接修改/usr/local/nginx/conf/nginx.conf。

此时启动nginx,在终端输入

curl http://localhost/test

  就可以看到Hello World!了。

  其实你会发现,对于http://localhost/test/*,*表示任意字符串,都能获得Hello World!的结果。

本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/p/3226771.html,如需转载请自行联系原作者

《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld相关推荐

  1. 图形化Cisco设备管理实践(附安装配置视频)

    图形化Cisco设备管理实践 Ciscoworks 2000是Cisco公司推出的基于SNMP协议的网络管理系统,通过它网络管理人员可以方便快捷地完成设备的配置.管理.监控和故障分析等任务, Cisc ...

  2. nginx图片过滤处理模块http_image_filter_module安装配置笔记

    http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时 ...

  3. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...

  4. log nginx 客户端请求大小_后端实践:Nginx日志配置(超详细)

    前言 设置access_log语法 作用域 基本用法 使用log_format自定义日志格式语法 设置error_log语法 基本用法 open_log_file_cache语法 基本用法 总结 前言 ...

  5. ELK 6下日志平台监控Nginx日志构建实践

    整体架构 整体架构主要分为 4 个模块,分别提供不同的功能 Filebeat:轻量级数据收集引擎.基于原先 Logstash-fowarder 的源码改造出来.换句话说:Filebeat就是新版的 L ...

  6. Nginx入门与实践

    文章目录 1.基本介绍 1.1 Nginx概述 1.2 正向代理 1.3 反向代理 1.4 负载均衡 1.5 动静分离 2. Nginx的安装 3.Nginx的常用命令 4.Nginx的配置文件 4. ...

  7. 实践:nginx代理,通过使用GeoIp模块获取访问者IP及访问地区信息

    目录 前言 一.在Linux中创建存放nginx模块文件夹 存在就不需要再次创建. 将所有nginx额外模块包都放到这个目录下 二.配置host文件代理,避免访问github太慢(已配置了跳过) 三. ...

  8. keepalived+lvs结合nginx压力测试实践

    需求 最近做一个kafka的中间件,需求比较简单,就一个需求:支持的吞吐量为5WQps. 尝试 接口内容比较简单:根据topic,key,value发送到kafka一条数据.把代码撸好-单元测试-部署 ...

  9. 图灵社区 : 阅读 : php+gridfs+varnish+nginx 搭建分布式图片存储

    图灵社区 : 阅读 : php+gridfs+varnish+nginx 搭建分布式图片存储 LedisDB--Go编写的高性能NoSQL数据库

最新文章

  1. 策略模式,状态模式,监听模式之间的区分。
  2. Struts2教程1:第一个Struts2程序
  3. jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法
  4. win7 操作mysql_win7系统如何设置Mysql密码保护数据库
  5. 配置vmcore通过ssh转储到其他主机的方法
  6. 【转】Apache——世界使用排名第一的Web服务器
  7. cox回归模型python实现_生存分析Cox回归模型(比例风险模型)的spss操作实例
  8. m3u8.sqlite转mp4(txkt,文末附程序下载地址)
  9. 【招聘】上海微创医疗机器人集团 - 软件工程师/图像算法工程师
  10. 装逼神器--黑客帝国的实现效果(linux环境系统)
  11. MySQL存储过程 -- 通过游标遍历和异常处理迁移数据到历史表
  12. 万字详解大数据平台异地多机房架构实践
  13. 网上能干啥副业?适合网上干的副业,副业兼职做什么好?
  14. 数据库中专门的关系运算——除运算
  15. Autolayout_自定义View
  16. xMAP/NMAP/MIAP/移动办公/手机办公/移动适配
  17. MyEclipse 8.5 中 MTJ 的安装
  18. 看这一篇,你还不会Linux吗?
  19. 百度 阿里 腾讯 BAT笔试题目
  20. 电脑软件:office文档密码了怎么办,看完你就能自己找回了

热门文章

  1. Charles抓包工具过滤网络请求
  2. selenium——元素的定位
  3. (第十二周)Bug修正报告
  4. 如何获取客户端MAC地址(三个方法)
  5. 比较:Java和python
  6. 安装 Visual Studio Async CTP
  7. 使用EDITPLUS编写C#控制台应用程序
  8. 图像处理随笔——非极大值抑制
  9. 研究生阅读管理文献---我阅读科研文献的一些做法
  10. 谜底是计算机的谜语英语,英语谜语(Riddle)  谜底