`
100Continue
  • 浏览: 157836 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Nginx include指令的测试

阅读更多

需求:

淘宝的Tengine服务器在1.0.1版本的时候对Include指令进行了增强:

 

Syntax: include  file | *

Default: no

 

使用此指令,可以包含任何你想要包含的配置文件,当配置文件include多个文件时按照字母或数字顺序进行包含。

如何通过功能/黑盒测试来验证include指令对多个文件是否确实按照字母或数字的顺序进行包含,成为需要解决的问题。


解决方案:(在此列举3个我个人整理的解决方法)

1. 比较笨的方法:在Tengine源码的main函数内添加检查语句,根据返回值的情况来判断include指令对多个文件的包含顺序;


2. 比较麻烦的方法:在Tengine编译的时候,加入第三方模块:ECHO模块。将ECHO模块的输出指令分别写入到不同的文件中,然后在配置文件中的相应的location内通过inlude指令对那些文件进行包含。

通过对Tengine的请求访问,验证返回的响应头内ECHO模块所输出的信息的顺序,以此来判断include指令对多个文件的包含顺序是否正确;


3. 比较容易的方法(这也是我所采用的测试方法):

首先需要了解Tengine(Nginx)的location匹配规则,在此仅介绍与本次相关的location正则匹配的规则,如需详细了解可参见Nginx官网wiki。

匹配规则是:按照正则location在配置文件中的物理顺序(编辑顺序)匹配的,并且只要匹配到一条正则location,就不再考虑后面的。

因此,我们可以利用Nginx location正则匹配的这个特点来进行测试。

 

案例一:

当配置文件内的location配置如下时:

 

        location  ~ /er.* {
            error_page 404 /404_1.html;
        }

        location ~ /err.* {
            error_page 404 /404_2.html;
        }

 

 访问url: http://serverip:port/error/pageNotExit;

 返回: 404_1.html页面;

 

 访问url: http://serverip:port/eroor/pageNotExit;

 返回: 404_1.html页面;

 

案例二:

当配置文件内的location配置如下时:

 

        location ~ /err.* {
            error_page 404 /404_2.html;
        }

        location  ~ /er.* {
            error_page 404 /404_1.html;
        }

 访问url: http://serverip:port/error/pageNotExit;

 

 返回: 404_2.html页面;

 

 访问url: http://serverip:port/eroor/pageNotExit;

 返回: 404_1.html页面;

 

因此,我们只需要在将这两个location配置写如不同的文件中:

 

文件名1.conf 写道
location ~ /er.* {
error_page 404 /404_2.html;
}
 

 

文件名2.conf 写道
location ~ /err.* {
error_page 404 /404_2.html;
}

 

然后在Tengine(Nginx)测试的配置文件中设置include指令:

server {
        listen       8099;
        server_name  localhost;

        include location/*.conf;
}
 

那么通过设计特定的url访问并检查返回结果就可以测试include指令对多个文件的包含顺序了。

 

ok,  Nginx include指令的测试介绍完毕, 欢迎拍砖。转发请备注转自:100continue.iteye.com。 谢谢。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics