linux高阶-Nginx服务(三)-模块、配置指令、块之间的关系

  • 通过上一篇文章我们已经了解,编译安装完nginx后,nginx会提供一个默认server,我们可以从/apps/nginx/nginx.conf文件中找到这个默认server的相关配置,如下:
//查看配置文件
grep -v "^$" /apps/nginx/conf/nginx.conf | grep -v "#"

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 上一篇文章中有上述配置的大致含义,而且我们知道,一个http块中可以配置多个server块,一个server块中可以配置多个location,那么此处,我们就来多配置几个location试试,我已经配置好了一个server用于演示的示例,如下:
//查看配置文件
grep -v "^$" /apps/nginx/conf/nginx.conf | grep -v "#"

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
	    
        location /demo{
		    root  /opt;
		    index index.html index.htm;
	    }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 如你所见,我在默认配置之上,添了一个location块,这个location对应的url为"/demo",此location块中的"root /opt;“配置指令表示这个location的文档目录为”/opt"目录,所以当我们在浏览器中访问"/demo/a.jpg"这个url时,访问的其实是服务器中的"/opt/demo/a.jpg"文件,如果你不明白为什么url与服务器路径存在这种对应关系,不用担心,我们会在之后的文章中总结root指令和location块之间的具体关系以及它们的用法,此处我们先不用纠结,我们先把关注的重点放在别的地方,为了方便示例,我已经在服务其上创建了/opt/demo/目录,并且在此目录中创建了一个用于测试的index.html的文件,index.html内容如下:
//创建测试页面存放目录
mkdir /opt/demo

//创建测试页面
vim /opt/demo/index.html 

//测试页面文件内容
this is /opt/demo/index.html

//重新加载配置文件
/apps/nginx/sbin/nginx -s reload
  • 由于我在完成上述配置之前已经启动了nginx,所以此处执行"/apps/nginx/sbin/nginx -s reload"命令重载配置,一边在不停止nginx服务的情况下使新的配置能够立即生效

  • 浏览器访问http://172.20.26.104/demo/

在这里插入图片描述

  • 如你所见,我们自定义的location已经生效,当我们访问"http://172.20.26.104/demo/“这个url时,即可访问到服务器的”/opt/demo/index.html"文件,通过上述示例,你应该已经明白,在同一个web服务中,我们可以将不同的url对应到不同的服务器路径中,上例中,除了默认的location,我们又手动配置了一个新的location,默认的location为"/",我们手动配置的新的location为"/demo",所以,访问这两个url时,会分别对应到不同的文档根目录,从不同的目录中查找对应的资源,又因为index配置指令的原因,会默认访问对应目录中的index.html文件或index.html文件,所以最终效果就像你刚才看到的那样。

  • 细心的你,一定会发现,默认的location和我们新加入的location中,index配置指令的值是完全相同的,那么,我们能不能把index配置项提取出来呢?答案是可以的,由于这两个location的index配置完全相同,所以,我们可以把这个index配置项提取到上一级的server块中,一边这两个location共享这个index配置,配置如下:

//查看配置文件得
grep -v "^$" /apps/nginx/conf/nginx.conf | grep -v "#"

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
		index index.html index.htm;
        location / {
            root   html;
        }
	    location /demo{
		    root  /opt;
	    }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 上述配置中,server块中index配置是对当前server块中得所有location块生效得,但是由于"location/demo"中有自己的index配置,那么针对"location/demo"来说,自己的index配置的优先级更高,自己的index配置会覆盖上一级的index配置,所以,当我们访问"/demo"这个url时,默认会在对应的目录中查找a.jpg这个文件,而不是index.html,但是另外一个location中由于没有配置index指令,所以它仍然会以上一级server块中index配置为准。

  • 通过上述示例得,同一个配置指令,配置在不同的块中时,对应的"作用域"是不同的。

  • 某些配置指令只能在http块中配置,某些配置指令只能在location块中配置,有些配置既能在server块中配置又能在http块中配置,而有些配置指令只能main区中进行配置。

  • 其实,刚才示例中的index指令就属于那种既能在location块中配置,又能在server块中配置,还能再http块中配置的指令,只不过,当index指令配置在不同的块时,对应的作用域不同。

  • 举一反三,有些指令既能配置在sever块中,也能配置在http块中,当多个server存在相同的配置时,我们可以将这些完全相同的配置指令提取到上一级的http块中,以便多个server块共用这些配置,当然,如果你在某个server中单独配置了对应的配置指令,那么这个server仍然会以自己的配置额为准。

  • 通过上述示例,你是不是对"配置指令"和"块"之间的关系理解的也更深刻了呢?

  • 其实,“配置指令"不仅和"块"有一定的关系,“配置指令"和"模块也有着非常紧密的对应关系,之前总结过,nginx是模块化的,不同的"模块"负责不同的"功能”,所以,当我们需要针对某个"功能"进行配置时,就需要使用到对应的"配置指令”,从根本上来说,每个"配置指令"都属于某一个"模块",一个"模块"中会有一个或多个"配置指令",当我们想要对相应的模块或功能进行设置时,就会使用到对应模块中的配置指令。nginx除了内置的模块,还有一些模块,我们可以在编译安装时选择安装哪些可选模块,如果你没有安装对应的可选模块,那么你将无法使用对应的配置指令。原因刚才已经说过了,每个配置指令都属于某一个模块。

  • 当然,作为用户,没有人天生就会使用nginx的这些配置指令,也没有人能够记住所有模块、配置指令、块之间的关系,所以,我们可以通过官方的文档进行查询们就来介绍一下怎样通过官网文档找到我们想要的答案。

官网地址:http://nginx.org/

在这里插入图片描述

  • 打开文档页面之后,你可以看到一些关于nginx的相关链接,这些链接中包含了与nginx相关的各种信息,我们可以从这些链接中找到我们想要的答案,仍然那刚才的index指令作为示例,如果,我们想要找到index指令的使用方法,该怎么找呢?方法如下:

  • 下拉文档页面,找到如下图所示的"modeules reference"部分,点击下图中标注的"Alphabetical index of directives"链接

在这里插入图片描述

  • 点击上述链接后,你会看到一个指令列表,这个指令列表里面就是所有我们能用到的配置指令,这些配置指令按照字母顺序排序,在浏览器中使用"ctrl + f"进行搜索刚才我们用于示例的index配置指令,如下:

在这里插入图片描述

  • 点解index链接,即可看到index指令的相关信息,首先页面最上方显示的当前指令属于哪个模块,你看到的一行黑字体"Module ngx_http_index_modul",也就是说,index配置指令属于ngx_http_index_modul模块,由于这个模块中只有index一个指令,所以你在当前页面中只会看到index指令的用法与示例,如果你查看的指令所在的模块包含很多条指令,那么这个模块中所包含的所有指令的用法与示例都会展示在这个页面中,你在当前页面中,可以看到index的基本语法概述,如下:
Syntax:	index file ...;
Default:	
index index.html;
Context:	http, server, location

在这里插入图片描述

  • 上述这段示例告诉了我们index指令的基本语发、默认值、以及上下文位置。

    • Syntax表示指令的基本语法
    • Default表示指令的默认值是什么
    • Context表示指令所处的上下文位置,上下文位置是什么意思呢?说白了,就是我们之前说的,指令能够配置在哪个块中,从官网的示例中可以看出,index指令块、server块或者location块中。
  • 基本语法概述之后,还有该指令对应的一些示例,你可以参考官网给出的示例学习该指令的用法。

  • 经过上述描述,你肯定已经明白了怎样通过指令列表找到它所在的模块以及指令的用法。

  • 不过在使用的过程中,你可能还会有另一种需求,就是想要了解某个模块的作用,以及这个模块中包含哪些指令,那么,怎样才能找到自己想要了解的模块呢?非常类似,仍然是打开官网,点击右侧菜单中的"documentation"链接,进入文档页面,下拉页面,找到"modules reference"部分,"modules reference"部有模块的模块列表,如果你想要的了解某个模块,只要点击模块对应的链接,就能够看到模块以及对应指令的使用方法了,此处,点击模块列表的"ngx_http_index_modul"链接,你会发现,此链接中的内容与之前通过指令列表查找到的内容完全相同,其实,我们只是通过两种方式查找到了相同的内容而已,第一种方式是通过指令列
    式是通过模块列表查找,只是查找方式不同,最终得到的内容是完全相同的。


希望这篇文章能够能对看文章的你有所帮助😆
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值