前言

以前,我读过nginx的源码,甚至还改过。但是,现在回想起来几乎回想不起任何东西,

只记得到处都是回调和异步,我的vim+ctags索引起来十分吃力。

几乎没有任何收获,都是因为当时打开代码就看,完全不了解背景和设计思想,只知其然不知其所以然。

如今,做好准备工作,再学习一下。

简单的时候,这个准备工作分两步:

1. 掌握一般性的http,https知识。(应该是都掌握的,不然也没有读nginx代码的理由)

2. 把这个页https://nginx.org/en/docs/ 从上到下读一遍。(我当然是跳着读的)

Author: classic_tong

详细如下:

一  获取代码

nginx官网提供的源码在这个位置:http://hg.nginx.org/nginx

github上有一个mirror: https://github.com/nginx/nginx

二 编译安装

两步,configure 然后make

[root@T9 nginx.git]# ls
auto conf contrib docs Makefile misc objs src

顶级目录是如上这样的,configure脚本在auto下面,但是必须在顶级目录运行。。如下这样:

./auto/configure --prefix=/root/OUTPUT_nginx/ \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gunzip_module \
--with-stream \
--with-stream_ssl_module \
--with-debug

然后,make,Make install,就装好了:

[root@T9 nginx.git]# ll /root/OUTPUT_nginx/
total
drwx------ nobody root Sep : client_body_temp
drwxr-xr-x root root Sep : conf
drwx------ nobody root Sep : fastcgi_temp
drwxr-xr-x root root Sep : html
drwxr-xr-x root root Sep : logs
drwx------ nobody root Sep : proxy_temp
drwxr-xr-x root root Sep : sbin
drwx------ nobody root Sep : scgi_temp
drwx------ nobody root Sep : uwsgi_temp

三 使用

(1)

直接运行二进制./sbin/nginx 会驱动nginx的daemon。一个master若干work进程:

[root@T9 OUTPUT_nginx]# ps -ef |grep nginx
root Sep09 ? :: nginx: master process ./nginx
nobody Sep09 ? :: nginx: worker process

使用,-s参数可以进行不同的daemon交互。例如 -s reload可以重新加载配置。

(2)最简配置

做了个最简配置,运行使用一下:

[root@T9 OUTPUT_nginx]# cat conf/nginx.conf
events {
}
http {
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}
[root@T9 OUTPUT_nginx]# tree /data/
/data/
├── images
│   └── .png
└── www
└── .html

在此基础上,通过以下文档,理解最基本的概念:

https://nginx.org/en/docs/beginners_guide.html

四 其他配置实验

通过文档完成其他场景的配置实验:

如何配置https server: https://nginx.org/en/docs/http/configuring_https_servers.html

如何配置Load Balance:https://nginx.org/en/docs/http/load_balancing.html

五 熟悉一般流程

nginx 处理一个请求的一般过程:https://nginx.org/en/docs/http/request_processing.html

nginx 处理一个stream的一般过程:https://nginx.org/en/docs/stream/stream_processing.html

六 nginx开发者指南

必须详细阅读,不可略过:https://nginx.org/en/docs/dev/development_guide.html

七 nginx哲学

非常好,非常受益。讲了思想和缘由,一定要读。(包括为什么全是异步和回调)

必须详细阅读,不可略过:http://www.aosabook.org/en/nginx.html

八 可以读源码了

读读读

九 书

代码其实没那么好读。为了效率,这本书很好:

另一本书,tengine团队编写的,我并没看,浏览目录还不错。

http://tengine.taobao.org/book/index.html#

十 更多

第三方模块列表:https://www.nginx.com/resources/wiki/modules/index.html

[dev][nginx] 在阅读nginx代码之前都需要准备什么的更多相关文章

  1. 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld

    最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...

  2. 《深入理解Nginx》阅读与实践(三):使用upstream和subrequest访问第三方服务

    本文是对陶辉<深入理解Nginx>第5章内容的梳理以及实现,代码和注释基本出自此书. 一.upstream:以向nginx服务器的请求转化为向google服务器的搜索请求为例 (一)模块框 ...

  3. 《深入理解Nginx》阅读与实践(二):配置项的使用

    前文链接:<深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld HelloWorld的完成意味着已经踏入了nginx的大门,虽然很振奋人心,但在编写中仍有很多疑 ...

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

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

  5. 你连Nginx怎么转发给你请求都说不清楚,还好意思说自己不是CRUD工程师?

    目录 一.Nginx工作原理二.Nginx进程模型三.Nginx处理HTTP请求流程 Nginx 工作原理 Nginx由内核和模块组成,Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅 ...

  6. nginx得请求转发代码-将请求转发到网关

    首先:本地主机host更改成 192.168.111.1 gulimail.com 这样一访问网址就能映射到本地. 然后修改nginx得conf worker_processes 1; events ...

  7. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  8. Nginx配置文件(nginx.conf)配置详解(2)

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  9. Nginx配置文件(nginx.conf)配置详解

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

随机推荐

  1. 泡泡一分钟:GEN-SLAM - Generative Modeling for Monocular Simultaneous Localization and Mapping

    张宁  GEN-SLAM - Generative Modeling for Monocular Simultaneous Localization and Mapping GEN-SLAM  - 单 ...

  2. EasyNVR摄像机网页直播之问题解决:Failed:SYSTEM\CurrentCont......\Application\EasyNVR_Service registry key already

    背景分析 经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播产品,EasyNVR主要功能在于通过RTSP/ONvif协议,接入前端音视频采集设备,通过EasyNVR软硬件产品将拉取过来的 ...

  3. 【模型压缩】MetaPruning:基于元学习和AutoML的模型压缩新方法

    论文名称:MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning 论文地址:https://arxiv.org/ ...

  4. mysql使用yum源安装各个版本的mysql数据库

    每次想用yum安装旧版本的mysql时,发现都找不到mysql的yum安装源,在官网只能找到最新版本mysql的yum源.后来才知道,原来最新的mysql的yum源也是包含了旧版本的mysql的yum ...

  5. Spring boot后台搭建二为Shiro权限控制添加缓存

    在添加权限控制后,添加方法 查看 当用户访问”获取用户信息”.”新增用户”和”删除用户”的时,后台输出打印如下信息 , Druid数据源SQL监控 为了避免频繁访问数据库获取权限信息,在Shiro中加 ...

  6. js arguments

    偶然碰见一个有意思的题 <script> var length = 10; function fn() { console.log( this.length ); // 10 } var ...

  7. TCP/IP学习笔记17--TCP-- 窗口控制 重发控制 流控制

    事业无穷年 -- 韩愈 利用窗口控制提高速度: TCP传输数据是,以一个段为单位(每次发送一个数据包),每发一个段需要一次确认应答,这样就难免存在这样的缺点:包的往返时间越长,通信性能就越低. 为解决 ...

  8. python三大器之装饰器的练习

    装饰器 加载顺序从下至上 执行顺序从上至下 ''' 多层装饰器 ''' def deco1(func): #func=deco2 def wrapper1(*args, **kwargs): '''t ...

  9. REST Framework接口规范

    REST Framework接口规范 一 .发展及其背景介绍 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备-).因此,必须有一种统一的 ...

  10. 【C#】课堂知识点#4

    1.回顾类中基本结构. 成员分为: a.(数据成员) , b.(方法成员) 数据成员: 字段 方法成员:方法,构造函数,属性,索引器,运算符. 属性的作用: 对字段进行访问提供get,set方法. 类 ...