当前位置:网站首页>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"
}
边栏推荐
- The most powerful new household god card of Bank of communications. Apply to earn 2100 yuan. Hurry up if you haven't applied!
- Using druid to connect to MySQL database reports the wrong type
- Interesting practice of robot programming 15- autoavoidobstacles
- One plus six brushes into Kali nethunter
- Action News
- Official announcement! The third cloud native programming challenge is officially launched!
- Pgadmin 4 V6.5 release, PostgreSQL open source graphical management tool
- Security level
- Restful fast request 2022.2.1 release, support curl import
- Vulnstack3
猜你喜欢
Marubeni Baidu applet detailed configuration tutorial, approved.
runc hang 导致 Kubernetes 节点 NotReady
One plus six brushes into Kali nethunter
Restful Fast Request 2022.2.1发布,支持cURL导入
Win: use PowerShell to check the strength of wireless signal
Prometheus monitors the correct posture of redis cluster
R language uses logistic regression and afrima, ARIMA time series models to predict world population
Open source SPL optimized report application coping endlessly
[uc/os-iii] chapter 1.2.3.4 understanding RTOS
Application and Optimization Practice of redis in vivo push platform
随机推荐
Restful fast request 2022.2.1 release, support curl import
What sparks can applet container technology collide with IOT
Interesting practice of robot programming 15- autoavoidobstacles
[technology development-26]: data security of new information and communication networks
pytorch fine-tuning (funtune) : 镂空设计or 偷梁换柱
[OpenGL learning notes 8] texture
Application and Optimization Practice of redis in vivo push platform
Data guard -- theoretical explanation (III)
Outlook:总是提示输入用户密码
如何搭建一支搞垮公司的技术团队?
Flutter 2.10 update details
PowerShell:在代理服务器后面使用 PowerShell
Yyds dry inventory jetpack hit dependency injection framework Getting Started Guide
Summary and practice of knowledge map construction technology
Stored procedure and stored function in Oracle
JVM's responsibility - load and run bytecode
Word processing software
Application and Optimization Practice of redis in vivo push platform
Leetcode takes out the least number of magic beans
Outlook: always prompt for user password