博主会将与Nginx有关的知识点总结到”nginx短篇系列“文章中,如果你对nginx不是特别了解,请按照顺序阅读”nginx短篇系列”,以便站在前文的基础上理解新的知识点。
通过前文我们已经了解到,安装nginx以后,nginx会提供一个默认server,我们可以从nginx.conf文件中找到这个默认server的相关配置,如下:
由于我在完成上述配置之前已经启动了nginx,所以此处执行”nginx -s reload”命令重载配置,以便在不停止nginx服务的情况下使新的配置能够立即生效,重载配置以后,在浏览器中访问链接地址”http://10.1.1.72/demo/”,效果如下:
如你所见,我们自定义的location已经生效了,当我们访问”http://10.1.1.72/demo/”这个url时,即可访问到服务器的”/opt/demo/index.html”文件,通过上述示例,你应该已经明白了,在同一个web服务中,我们可以将不同的url对应到不同的服务器路径中,上例中,除了默认的location,我们又手动配置了一个新的location,默认的location为”/”,我们手动配置的新的location为”/demo”,所以,访问这两个url时,会分别对应的不同的文档根目录,从不同的目录中查找对应的资源,又因为index配置指令的原因,会默认访问对应目录中的index.html文件或index.htm文件,所以最终效果就像你刚才看到的那样。
细心如你,一定发现了,默认的location和我们新加入的location中,index配置指令的值是完全相同的,那么,我们能不能把index配置项提取出来呢?是可以的,由于这两个location的index配置完全相同,所以,我们可以把这个index配置项提取到上一级的server块中,以便这两个location共享这个index配置,配置如下
通过上述示例,你肯定明白了一个道理,同一个配置指令,配置在不同的块中时,对应的”作用域”是不同的。
还记得我们在之前的文章中总结过如下这段话吗?
某些配置指令只能在http块中配置,某些配置指令只能在location块中配置,有些配置指令既能在server块中配置又能在http块中配置,而有些配置指令只能在main区中进行配置。
其实,刚才示例中的index指令就属于那种既能在location块中配置,又能在server块中配置,还能再http块中配置的指令,只不过,当index指令配置在不同的块中时,对应的作用域不同。
举一反三,有些指令既能配置在server块中,也能配置在http块中,当多个server存在相同的配置时,我们可以将这些完全相同的配置指令提取到上一级的http块中,以便多个server块共用这些配置,当然,如果你在某个server中单独配置了对应的配置指令,那么这个server仍然会以自己的配置为准。
通过上述示例,你是不是对”配置指令”和”块”之间的关系理解的更加透彻了呢?
其实,”配置指令”不仅和”块”有一定的关系,”配置指令”和”模块”也有着非常紧密的对应关系,之前总结过,nginx是模块化的,不同的”模块”负责不同的”功能”,所以,当我们需要针对某个”功能”进行配置时,就需要使用到对应的”配置指令”,从根本上来说,每个”配置指令”都属于某一个”模块”,一个”模块”中会有一个或多个”配置指令”,当我们想要对相关模块或者功能进行设置时,就会使用到对应模块中的配置指令。在第一篇文章中我们就提到过,除了内置的标准模块,还有一些可选模块,我们可以在编译安装时选择安装哪些可选模块,如果你没有安装对应的可选模块,那么你也无法使用对应的配置指令。原因刚才已经说过,每个配置指令都属于某一个模块。
当然,作为用户,没有人天生就会使用nginx的这些配置指令,也没有人能够记住所有模块、配置指令、块之间的关系,所以,我们可以通过官方的文档进行查询,那么此处,我们就来介绍一下怎样通过官网文档找到我们想要的答案。
首先,打开nginx开源版官网,nginx.org,打开官网后,可以看到如下页面,在如下页面的右侧菜单中,可以找到”documentation”链接,点击此链接,即可看到nginx官网文档。
打开文档页面后,你可以看到一些关于nginx的相关链接,这些链接中包含了与nignx相关的各种信息,我们可以从这些链接中找到我们想要的答案,仍然拿刚才的index指令作为示例,如果,我们想要找到index指令的使用方法,该怎么办呢?方法如下:
下拉文档页面,找到如下图所示的”modules reference”部分,点击下图中标注出的”Alphabetical index of directives”链接
点击上述链接后,你会看到一个指令列表,这个指令列表里面就是所有我们能用到的配置指令,这些配置指令按照字母顺序排序,在浏览器中使用”ctrl + f”进行搜索,此处,我搜索刚才我们用于示例的index配置指令,如下
点击index链接,即可看到index指令的相关信息,此处就不截图了,首先,页面最上方会显示当前指令属于哪个模块,你看到的应该是一行黑体字”Module ngx_http_index_module”,也就是说,index配置指令属于ngx_http_index_module模块,由于这个模块中只有index一个指令,所以你在当前页面中只会看到index指令的用法与示例,如果你查看的指令所在的模块包含很多条指令,那么这个模块中所包含的所有指令的用法与示例都会展示在这个页面中,你在当前页面中,应该可以看到index的基本语法概述,如下:
Syntax: index file …;Default: index index.html;
Context: http, server, location
上述这段示例告诉了我们index指令的基本语发、默认值、以及上下文位置。
Syntax表示指令的基本语法
Default表示指令的默认值是什么
Context表示指令所处的上下文位置,上下文位置是什么意思呢?说白了,就是我们之前说的,指令能够配置在哪个块中,从官网的示例中可以看出,index指令只能配置在http块、server块或者location块中。
基本语法概述之后,还有该指令对应的一些示例,你可以参考官网给出的示例学习该指令的用法。
经过上述描述,你肯定已经明白了怎样通过指令列表找到它所在的模块以及指令的用法。
不过在使用的过程中,你可能还会有另一种需求,就是想要了解某个模块的作用,以及这个模块中包含哪些指令,那么,怎样才能找到自己想要了解的模块呢?其实与刚才的步骤非常类似,仍然是打开官网,点击右侧菜单中的”documentation”链接,进入文档页面,下拉页面,找到”modules reference”部分,”modules reference”部分下面其实就是所有模块的模块列表,如果你想要的了解某个模块,只要点击模块对应的链接,就能够看到模块以及对应指令的使用方法了,此处,点击模块列表中的”ngx_http_index_module”链接,你会发现,此链接中的内容与之前通过指令列表查找到的内容完全相同,其实,我们只是通过两种方式查找到了相同的内容而已,第一种方式是通过指令列表查找,第二种方式是通过模块列表查找,只是查找方式不同,最终得到的内容是完全相同的。
这篇文章就写到这里,希望能够对你有所帮助~