当前位置:网站首页>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"
}
边栏推荐
- I use these six code comparison tools
- 使用druid連接MySQL數據庫報類型錯誤
- Win: enable and disable USB drives using group policy
- Summary and practice of knowledge map construction technology
- Serious bugs with lifted/nullable conversions from int, allowing conversion from decimal
- 100 basic multiple choice questions of C language (with answers) 04
- Redis' hyperloglog as a powerful tool for active user statistics
- Tla+ through examples (XI) -- propositional logic and examples
- Yolov5 model training and detection
- [Digital IC hand tearing code] Verilog edge detection circuit (rising edge, falling edge, double edge) | topic | principle | design | simulation
猜你喜欢
The MySQL team development specifications used by various factories are too detailed. It is recommended to collect them!
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
Introduce reflow & repaint, and how to optimize it?
"2022" is a must know web security interview question for job hopping
Win:使用 PowerShell 检查无线信号的强弱
Win: use PowerShell to check the strength of wireless signal
Mysql database | build master-slave instances of mysql-8.0 or above based on docker
Grub 2.12 will be released this year to continue to improve boot security
Codeforces Global Round 19 ABC
Three properties that a good homomorphic encryption should satisfy
随机推荐
如何搭建一支搞垮公司的技术团队?
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
. Net starts again happy 20th birthday
Binary tree traversal - middle order traversal (golang)
Word processing software
Start the remedial work. Print the contents of the array using the pointer
CAM Pytorch
What is the length of SHA512 hash string- What is the length of a hashed string with SHA512?
He was laid off.. 39 year old Ali P9, saved 150million
Stored procedure and stored function in Oracle
Luo Gu Pardon prisoners of war
One plus six brushes into Kali nethunter
Practice of tdengine in TCL air conditioning energy management platform
Summary and practice of knowledge map construction technology
Educational Codeforces Round 122 (Rated for Div. 2) ABC
[source code attached] Intelligent Recommendation System Based on knowledge map -sylvie rabbit
Asynchronous and promise
[understanding of opportunity -38]: Guiguzi - Chapter 5 flying clamp - warning one: there is a kind of killing called "killing"
[download white paper] does your customer relationship management (CRM) really "manage" customers?
Numpy library introductory tutorial: basic knowledge summary