回答
收藏
分享
举报
脚本指令问题
提问于2021-03-05 11:59

浏览 691

如果在某个location里面定义一些指令,发现这些指令并不是按照他们生命和定义的顺序执行的。

那么他们执行的顺序是什么样子的? 是按照指定所在的模块所处的阶段以及模块在某一个阶段中模块的位置决定的吗?


比如如下的定义:

location /test {

    directive A;

    directive B;

    directive C;

}


如果A,B指令所处的模块是content阶段,而且模块B位于模块A前面(只是假设), 指令C所处的模块是 rewrite阶段.

那么指令ABC的执行顺序就是 C , B , A 。

请问这样的理解对吗?

已修改于2023-03-15 02:14



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

1、非脚本类的指令的顺序:1)先根据阶段,就像你说的;2)同一阶段内的模块之间,在configure时会决定顺序;

2、脚本类指令,如set、if等,是有顺序的,谁在前就先执行谁

赞同

1

回复举报

回答于2021-03-05 13:49



回复陶辉
回复
Rockets回复了

多谢陶辉老师。如果非脚本指令和脚本指令在一起也是按照阶段来执行?


 比如如果一个content阶段的指令A处于脚本类指定B(rewrite阶段)前面,但是因为rewrite在content前面,所以要先执行B在执行A,的对吗?

set $a "before”;

echo $a;

set $a "after";

这个序列最后输出是after, 对吗?

1

回复举报

回答于2021-03-05 06:14



回复Rockets
回复
陶辉回复了Rockets

2

回复举报

回答于2021-03-05 06:50



回复陶辉
回复
Rockets回复了陶辉

感谢!

0

回复举报

回答于2021-03-05 09:41



回复Rockets
回复
提问者
Rockets
这家伙很懒还未留下介绍~
0
文章
10
问答
1
粉丝
相关问答

简言之,就是内核将Socket缓冲区情况通知给用户态进程的接口。概括为以下4点:

1、TCP由内核实现的,epoll是内核提供给应用进程的接口;

2、当TCP连接需要发送数据时,Socket缓冲区上必须有空闲位置。内核接收到对方的ACK报文,才能释放掉发送报文(否则要反复重发),产生空闲位置。

3、当TCP连接需要接收数据时,必须是Socket缓冲区上已经有数据了,否则read函数就会阻塞。epoll_wait可以完成2、3两个步骤(包括三次握手)的通知。

4、当你就某个TCP连接需要接收内核通知时,通过epoll_ctl函数告诉内核即可。

点赞 0
浏览 1k

可以的。 listen的语法可以支持端口范围。

点赞 0
浏览 674