nginx是一个值得学习与研究的开源代码,写这篇文章主要目的是让自己能够能够从最简单的任务开始,通过写作促进自己一步一步地深入学习与分析nginx。本文是这个系列的第一篇,主要是记录自己实现一个自定义的模块hello的过程。

1. 下载源码

下载nginx 1.8.0 源代码

1
2
root@localhost github]# wget  http://nginx.org/download/nginx-1.8.0.tar.gz
root@localhost github]# tar zxf  

2. 准备文件与代码

在nginx解压目录下,添加如下文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@localhost nginx-1.8.0]# tree | more
.
|-- **addon**
|   `-- **hello**
|       |-- **config**
|       `-- **ngx_http_hello_module.c**
|-- auto
|   |-- cc
|   |   |-- acc
|   |   |-- bcc

新增文件分析参考nginx-hello

1
2
3
4
5
6
7
8
[root@localhost nginx-1.8.0]# grep -r  ngx_addon_name  /share/github/nginx-1.8.0
/share/github/nginx-1.8.0/auto/modules:            echo " + $ngx_addon_name was configured"
/share/github/nginx-1.8.0/addon/hello/config:ngx_addon_name=ngx_http_hello_module
[root@localhost nginx-1.8.0]# 

[root@localhost nginx-1.8.0]# grep -r  add-module   /share/github/nginx-1.8.0
/share/github/nginx-1.8.0/auto/options:        --add-module=*)                  NGX_ADDONS="$NGX_ADDONS $value" ;;
/share/github/nginx-1.8.0/auto/options:  --add-module=PATH                  enable an external module

3. 编译与安装

编译三步走

1
2
3
4
5
1. ./configure   --add-module=/share/github/nginx-1.8.0/addon/hello

2. make  

3. make install 

4.测试

在/usr/local/nginx/conf/nginx.conf文件的http配置项下,添加如下内容:

1
2
3
location =/hello{
                    hello;
            }

过程如下:

1
2
3
4
5
6
7
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# service nginx  restart
Restarting nginx (via systemctl):  [  OK  ]
[root@localhost nginx-1.8.0]# curl http://localhost/hello/
hello nginx!

另外也可以通过浏览器访问:http://serverip/hello

如果出现不能打开,检查一下iptable 设置,在/etc/sysconfig/iptables增加下面一条配置,允许80端口通过:

1
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 

然后输入命令service iptables restart重启iptables服务,使新增配置生效

5. 实例代码

本文代码请参考:nginx-hello

本人水平有限,若有疏漏与错误,欢迎交流与指正。