当前位置:网站首页>openresty ngx_ Lua execution phase
openresty ngx_ Lua execution phase
2022-07-05 02:18:00 【o_ Guatian Lixia_ o】
openresty ngx_lua Execution phase
nginx http Execution phase
nginx http Execution phase
# ngx_http_core_module.h
typedef enum {
NGX_HTTP_POST_READ_PHASE = 0,
NGX_HTTP_SERVER_REWRITE_PHASE,
NGX_HTTP_FIND_CONFIG_PHASE,
NGX_HTTP_REWRITE_PHASE,
NGX_HTTP_POST_REWRITE_PHASE,
NGX_HTTP_PREACCESS_PHASE,
NGX_HTTP_ACCESS_PHASE,
NGX_HTTP_POST_ACCESS_PHASE,
NGX_HTTP_PRECONTENT_PHASE,
NGX_HTTP_CONTENT_PHASE,
NGX_HTTP_LOG_PHASE
} ngx_http_phases;
Description of the implementation phase
NGX_HTTP_POST_READ_PHASE = 0,
* Accept and read the request
NGX_HTTP_SERVER_REWRITE_PHASE,
* modify url Stage , Usually there is redirection 、 Variable is set
NGX_HTTP_FIND_CONFIG_PHASE,
* lookup url Corresponding configuration , If it matches location
NGX_HTTP_REWRITE_PHASE,
* Match to location after , May enter again NGX_HTTP_SERVER_REWRITE_PHASE
NGX_HTTP_POST_REWRITE_PHASE,
* Check url Whether the stage has been executed 4, If executed , Enter the stage again 3
* The maximum number of checks is 10, More than will report error
NGX_HTTP_PREACCESS_PHASE,
* Request resource speed limit and other operations
NGX_HTTP_ACCESS_PHASE,
* Access control , Such as restrictions ip visit
NGX_HTTP_POST_ACCESS_PHASE,
* verification NGX_HTTP_ACCESS_PHASE( Access control ) result , If yes, continue
NGX_HTTP_PRECONTENT_PHASE,
* try_files The directive takes effect
NGX_HTTP_CONTENT_PHASE,
* Handle http Request content , Generally, you need to interact with back-end applications
NGX_HTTP_LOG_PHASE
* Log output
ngx_lua Execution phase
Execution order
init_by_lua_block
init_worker_by_lua_block
set_by_lua_block
rewrite_by_lua_block
access_by_lua_block
content_by_lua_block
header_filter_by_lua_block
body_filter_by_lua_block
log_filter_by_lua_block
init_by_lua_block:nginx initialization 、 Execute on restart , stay http Set in the module
http {
include mime.types;
default_type application/octet-stream;
init_by_lua_block {
local uuid = require 'resty.jit-uuid';
uuid.seed();
}
...
}
init_by_lua_file: The functions and init_by_lua_block identical , The code block is saved in a file
http {
include mime.types;
default_type application/octet-stream;
init_worker_by_lua_file /usr/local/nginx/conf/init.lua
...
}
# /usr/local/nginx/conf/init.lua The contents of the document
local uuid = require 'resty.jit-uuid';
uuid.seed();
init_worker_by_lua_block:master After the process starts , Execute related code blocks , stay http Set in the module
# It can be used to perform scheduled tasks 、 Back end health check
http {
include mime.types;
default_type application/octet-stream;
init_worker_by_lua_block {
...
}
...
}
set_by_lua_block: Execute code block , And return the result , stay server、location Set
Grammar format :set_by_lua_block $result {...}
* This command is a blocking command , The executed statement block should be as short as possible 、 fast , Avoid taking too much time
* Disable :ngx.say()、ngx.exit()、ngx.sleep() Wait for the order
server {
listen 80;
server_name localhost;
set $a "";
set_by_lua_block $a {
return "1";
}
location / {
root /usr/local/openresty/nginx/html;
index index.html index.htm;
}
...
}
rewrite_by_lua_block: Rewrite phase execution , Can be found in http、server、location Set in
Grammar format :rewrite_by_lua_block {...}
* The statement block will be executed at the end , It can be done by rewrite_by_lua_no_postpone( Default off) Change the order of execution
* All... Can be called ngx api
# a The value of is 2
server {
listen 80;
server_name localhost;
set $a "1";
rewrite_by_lua_block {
ngx_var_a="2";
}
set $a "3"
location / {
root /usr/local/openresty/nginx/html;
index index.html index.htm;
}
...
}
# http Stage configuration :rewrite_by_lua_no_postpone on
# a The value of is 3
server {
listen 80;
server_name localhost;
set $a "1";
rewrite_by_lua_block {
ngx_var_a="2";
}
set $a "3"
location / {
root /usr/local/openresty/nginx/html;
index index.html index.htm;
}
...
}
access_by_lua_block:access Stage execution statement block ( Permission check 、 Black and white list ), stay http、server、location Set in
Grammar format :access_by_lua_block {...}
* The statement block will be executed at the end , It can be done by access_by_lua_no_postpone( Default off) Change the order of execution
* All... Can be called ngx api
* application : Store the black and white list in redis、 In shared memory , Dynamically set the black and white list
content_by_lua_block: The content processing phase executes , Set the output content , stay location Set in
Grammar format :content_by_lua_block {...}
* All... Can be called ngx api
* If used in conjunction with other content execution phase statements ,content_by_lua_block May not execute
location / {
content_by_lua_block {
ngx.say("hello gtlx");
}
echo "test" # Only output test, No output hello gtlx
}
content_by_lua_file: And content_by_lua_block identical , Statements are saved in a file , stay location Set in
Grammar format :content_by_lua_file file
* All... Can be called ngx api
location / {
content_by_lua_file /usr/local/openresty/file/test.lua
}
# file :/usr/local/openresty/file/test.lua
hello gtlx
balancer_by_lua_block: The content processing phase executes , stay upstream Use in statement
Grammar format :balancer_by_lua_block {...}
* upstream The use of ip by balancer_by_lua_block The address set in
* Forbidden api:cosockets、light threads
upstream web-server {
server 172.18.0.2 # Will ignore server Set up ip Address
balancer_by_lua_block {
... # It's really used ip Address
}
}
header_filter_by_lua_block: The response phase adds 、 Delete response header , stay http、server、location Set in
Grammar format :header_filter_by_lua_block {...}
* Forbidden api:ngx.say()、ngx.redirect()、ngx.exec() etc.
# Add response header
location {
header_filter_by_lua_block {
ngx.header.test="hello gtlx"
}
echo "hello"
}
body_filter_by_lua_block: In the response phase, modify the response body , stay http、server、location Set in
Grammar format :body_filter_by_lua_block {...}
* Forbidden api:ngx.say()、ngx.redirect()、ngx.exec() etc.
# Convert the corresponding data to uppercase (ngx.arg[1] Get response data ,ngx.arg[2] Response terminator )
# Output :HELLO
location {
body_filter_by_lua_block {
ngx.arg[1] = string.upper(ngx.arg[1]);
}
echo "hello"
}
log_by_lua_block: Output log , Can be found in http、server、location Set in
Grammar format :log_filter_by_lua_block {...}
* stay access_log Before execution , Will not replace the current access_log journal
* Forbidden api:ngx.say()、ngx.redirect()、ngx.exec() etc.
location {
log_filter_by_lua_block {
ngx.log("hello gtlx")
}
echo "hello"
}
边栏推荐
- Android advanced interview question record in 2022
- Security level
- Win:使用组策略启用和禁用 USB 驱动器
- Valentine's Day flirting with girls to force a small way, one can learn
- 85.4% mIOU! NVIDIA: using multi-scale attention for semantic segmentation, the code is open source!
- Leetcode takes out the least number of magic beans
- Common bit operation skills of C speech
- [technology development-26]: data security of new information and communication networks
- Exploration of short text analysis in the field of medical and health (II)
- Summary of regularization methods
猜你喜欢
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
Application and Optimization Practice of redis in vivo push platform
[技术发展-26]:新型信息与通信网络的数据安全
The application and Optimization Practice of redis in vivo push platform is transferred to the end of metadata by
Bert fine tuning skills experiment
Chinese natural language processing, medical, legal and other public data sets, sorting and sharing
Android advanced interview question record in 2022
Summary and practice of knowledge map construction technology
Marubeni Baidu applet detailed configuration tutorial, approved.
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
随机推荐
The MySQL team development specifications used by various factories are too detailed. It is recommended to collect them!
Redis' hyperloglog as a powerful tool for active user statistics
Pytorch fine tuning (Fortune): hollowed out design or cheating
179. Maximum number - sort
Variables in postman
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
RichView TRVUnits 图像显示单位
Huawei machine test question: longest continuous subsequence
Interesting practice of robot programming 15- autoavoidobstacles
Richview trvunits image display units
STM32 series - serial port UART software pin internal pull-up or external resistance pull-up - cause problem search
When to catch an exception and when to throw an exception- When to catch the Exception vs When to throw the Exceptions?
Data guard -- theoretical explanation (III)
[uc/os-iii] chapter 1.2.3.4 understanding RTOS
Video display and hiding of imitation tudou.com
Change the background color of a pop-up dialog
One plus six brushes into Kali nethunter
Pytorch common code snippet collection
Timescaledb 2.5.2 release, time series database based on PostgreSQL
Use the difference between "Chmod a + X" and "Chmod 755" [closed] - difference between using "Chmod a + X" and "Chmod 755" [closed]