前言
在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息,Nginx已经为用户提了强大的配置项解析机制,同时它还支持"-s reload"命令(在不重启服务的情况下使配置生效)。在这一系列文章中将讨论http配置项的一些特点,并全面讨论如何使用http配置项,包括使用Nginx预设的解析方法或者自定义配置项的解析方法。还会从HTTP框架的实现机制上解释http配置项的模型。
一、Nginx在处理配置项中需要面临的问题?
- Nginx如何解析http配置块中的配置项?
- 具体开发的HTTP模块是如何获取nginx.conf中的配置的?
- 当一个配置同时出现在http块、server块、location块时,应当选择哪一个块下的配置?
- 当多个不同URI表达式下的location都配置了mytest配置项,后面的参数却不同,Nginx如何处理?
二、Nginx配置的示例:
http {
test_str main;
server {
listen 80;
test_str server80;
location /url1 {
mytest;
test_str loc1;
}
location /url2 {
mytest;
test_str loc2;
}
}
server {
listen 8080;
test_str server8080;
location /url3 {
mytest;
test_str loc3;
}
}
}
- 在这段很短的配置中,mytest模块将会处理两个监听端口上建立的TCP连接,以及3种HTTP请求,请求的URL分别对应着/url1、/url2、/url3。
- 假设mytest模块必须取出test_str配置项的参数,但在以上的例子中test_str出现了6个不同的参数值,那么在mytest模块中以那个值为准呢?
- Nginx的设计非常灵活,它在每一个http块、server块或location块下,都生成独立的数据结构来存放配置项。因此,它允许当用户访问的请求不同时,配置项test_str具有不同的值。
- 当请求时/url1时,test_str的值应当是location块下的loc1,还是这个location所属的server块下的server80,又或者是其所属http块下的值main,这个可以由mytest模块自己决定。
总结
本文大体介绍了下这一系列文章将要介绍的关于Nginx配置项的大致内容,并对http配置项的使用场景做了简单说明,结合一个具体例子说明Nginx配置项的逻辑。