nginx + lua 학습 노트 1 Nginx Lua API
요청 접수
1. example. conf 프로필
location ~ /lua_request/(\d+)/(\d+) {
# nginx
set $a $1;
set $b $host;
default_type "text/html";
#nginx
content_by_lua_file /usr/example/lua/test_request.lua;
#
echo_after_body "ngx.var.b $b";
}
2、test_request.lua
--nginx
local var = ngx.var
ngx.say("ngx.var.a : ", var.a, "
")
ngx.say("ngx.var.b : ", var.b, "
")
ngx.say("ngx.var[2] : ", var[2], "
")
ngx.var.b = 2;
ngx.say("
")
--
local headers = ngx.req.get_headers()
ngx.say("headers begin", "
")
ngx.say("Host : ", headers["Host"], "
")
ngx.say("user-agent : ", headers["user-agent"], "
")
ngx.say("user-agent : ", headers.user_agent, "
")
for k,v in pairs(headers) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ","), "
")
else
ngx.say(k, " : ", v, "
")
end
end
ngx.say("headers end", "
")
ngx.say("
")
--get uri
ngx.say("uri args begin", "
")
local uri_args = ngx.req.get_uri_args()
for k, v in pairs(uri_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "
")
else
ngx.say(k, ": ", v, "
")
end
end
ngx.say("uri args end", "
")
ngx.say("
")
--post
ngx.req.read_body()
ngx.say("post args begin", "
")
local post_args = ngx.req.get_post_args()
for k, v in pairs(post_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "
")
else
ngx.say(k, ": ", v, "
")
end
end
ngx.say("post args end", "
")
ngx.say("
")
-- http
ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "
")
--
ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "
")
--
ngx.say("ngx.req.raw_header : ", ngx.req.raw_header(), "
")
-- body
ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "
")
ngx.say("
")
lua API 소개
ngx.var : nginx , ngx.var.b = 2, ; nginx location ngx.var[ ] ;
ngx.req.get_headers: , 100,
ngx.req.get_headers(0): headers.user_agent ; , table;
ngx.req.get_uri_args: url , get_headers ;
ngx.req.get_post_args: post , get_headers , ngx.req.read_body() body ( nginx )lua_need_request_body on; body , );
ngx.req.raw_header: ;
ngx.req.get_body_data: body 。
위 와 같은 방법 으로 일반적인 요 구 를 처리 하면 기본적으로 충분 하 다.또한 post 내용 체 를 읽 을 때 실제 상황 에 따라 client 를 설정 합 니 다.body_buffer_size 와 clientmax_body_크기 는 파일 이 아 닌 메모리 에 내용 을 저장 합 니 다.
다음 스 크 립 트 테스트 사용 하기
wget --post-data 'a=1&b=2' 'http://127.0.0.1/lua_request/1/2?a=3&b=4' -O -
출력 응답
1.1, example. conf 프로필
location /lua_response_1 {
default_type "text/html";
content_by_lua_file /usr/example/lua/test_response_1.lua;
}
1.2、test_response_1.lua
--
ngx.header.a = "1"
-- table
ngx.header.b = {"2", "3"}
--
ngx.say("a", "b", "
")
ngx.print("c", "d", "
")
--200
return ngx.exit(200)
2.1, example. conf 프로필
location /lua_response_2 {
default_type "text/html";
content_by_lua_file /usr/example/lua/test_response_2.lua;
}
2.2、test_response_2.lua
ngx.redirect("http://jd.com", 302)
ngx. status = 상태 코드, 응답 하 는 상태 코드 설정;ngx.resp.get_headers () 설정 한 응답 상태 코드 가 져 오기;ngx.send_headers () 는 응답 상태 코드 를 보 내 고 ngx. say / ngx. print 를 호출 할 때 자동 으로 응답 상태 코드 를 보 냅 니 다.ngx. headers 를 통 해sent = true 응답 상태 코드 를 보 냈 는 지 판단 합 니 다.
기타 API 1, example. conf 프로필
location /lua_other {
default_type "text/html";
content_by_lua_file /usr/example/lua/test_other.lua;
}
2、test_other.lua
-- uri
local request_uri = ngx.var.request_uri;
ngx.say("request_uri : ", request_uri, "
");
--
ngx.say("decode request_uri : ", ngx.unescape_uri(request_uri), "
");
--MD5
ngx.say("ngx.md5 : ", ngx.md5("123"), "
")
--http time
ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "
")
더 많은 Nginx Lua API 참고http://wiki.nginx.org/HttpLuaModule#Nginx_API_for_Lua。
Nginx 전역 메모리
자바 와 같은 친 구 는 Ehcache 등 프로 세 스 내 로 컬 캐 시 를 알 수 있 습 니 다. Nginx 는 Master 프로 세 스 여러 Worker 프로 세 스 의 작업 방식 이기 때문에 여러 Worker 프로 세 스 에서 데 이 터 를 공유 해 야 할 수도 있 습 니 다. 이 때
[ngx.shared.DICT]
를 사용 하여 전체 메모리 공 유 를 실현 할 수 있 습 니 다.1. 먼저 nginx. conf 의 http 부분 에 메모리 크기 를 할당 합 니 다.
# , worker
lua_shared_dict shared_data 1m;
2. example. conf 프로필
location /lua_shared_dict {
default_type "text/html";
content_by_lua_file /usr/example/lua/test_lua_shared_dict.lua;
}
3、 test_lua_shared_dict.lua
--1、
local shared_data = ngx.shared.shared_data
--2、
local i = shared_data:get("i")
if not i then
i = 1
--3、
shared_data:set("i", i)
ngx.say("lazy set i ", i, "
")
end
--
i = shared_data:incr("i", 1)
ngx.say("i=", i, "
")
더 많은 API 참고http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT。
이 기본 적 인 Nginx Lua API 를 배 웠 습 니 다. 요청 처리 와 출력 응답 은 위 에서 소개 한 API 와 충분히 사용 할 수 있 습 니 다. 더 많은 API 는 공식 문 서 를 참고 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.