Nginx+Lua: различия между версиями
Перейти к навигации
Перейти к поиску
Artem (обсуждение | вклад) Нет описания правки |
Artem (обсуждение | вклад) Нет описания правки |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 3: | Строка 3: | ||
* http://nginx.org/ru/docs/varindex.html | * http://nginx.org/ru/docs/varindex.html | ||
* https://www.nginx.com/resources/wiki/modules/lua/ | * https://www.nginx.com/resources/wiki/modules/lua/ | ||
* https://www.lua.org/pil/contents.html | |||
<pre> | <pre> | ||
Строка 28: | Строка 29: | ||
} | } | ||
} | } | ||
</pre> | |||
<pre> | |||
local expires = 3600 * 24 -- 1 day | |||
ngx.header["Set-Cookie"] = "session=blah; Path=/; Expires=" .. ngx.cookie_time(ngx.time() + expires) | |||
</pre> | |||
<pre> | |||
local curl = require "curl" | |||
local request = curl.easy_init() | |||
local request_url = 'https://httpbin.org/post' | |||
local request_post_data = 'test=1&test2=2' | |||
local request_headers = { | |||
"Connection: close", | |||
"Accept: application/json", | |||
"Cache-Control: no-cache", | |||
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8", | |||
"Content-Length: " .. string.len(request_post_data), | |||
} | |||
local responce_headers_chunks = {} | |||
local responce_data_chunks = {} | |||
local responce_headers = "" | |||
local responce_data = "" | |||
-- ------------------------------------------------------------------ | |||
request:setopt(curl.OPT_URL, request_url) | |||
request:setopt(curl.OPT_HTTPHEADER, request_headers) | |||
request:setopt(curl.OPT_POST, 1) | |||
request:setopt(curl.OPT_POSTFIELDS, request_post_data); | |||
request:setopt(curl.OPT_CONNECTTIMEOUT, 10) | |||
request:setopt(curl.OPT_FOLLOWLOCATION, 1) | |||
request:setopt(curl.OPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36") | |||
request:setopt(curl.OPT_SSL_VERIFYPEER, 0) | |||
request:setopt(curl.OPT_HEADERFUNCTION, function (param, buf) | |||
table.insert(responce_headers_chunks, param) | |||
return buf | |||
end) | |||
request:setopt(curl.OPT_WRITEFUNCTION, function (param, buf) | |||
table.insert(responce_data_chunks, param) | |||
return buf | |||
end) | |||
assert(request:perform()) | |||
responce_headers = table.concat(responce_headers_chunks) | |||
responce_data = table.concat(responce_data_chunks) | |||
-- ------------------------------------------------------------------ | |||
local json = require('cjson') | |||
print(responce_headers) | |||
print(responce_data) | |||
print(json.decode(responce_data)['form']['test']) | |||
</pre> | </pre> |
Текущая версия от 04:03, 16 декабря 2018
Идея построить сайт/сервис на луа + nginx подогревала меня давно, т.к. должно получиться очень быстро. Понемногу раскрываю тему.
- http://nginx.org/ru/docs/varindex.html
- https://www.nginx.com/resources/wiki/modules/lua/
- https://www.lua.org/pil/contents.html
lua_package_path ";;/home/artem/projects/blockbot/?.lua;"; server { listen 80; server_name blockbot; access_log /var/log/nginx/blockbot.access.log; error_log /var/log/nginx/blockbot.error.log info; client_max_body_size 1024m; location / { lua_code_cache off; set_by_lua_file $suspicious /home/artem/projects/blockbot/suspicious.lua; if ($suspicious) { content_by_lua_file /home/artem/projects/blockbot/captcha.lua; } proxy_set_header Host ecommercemarket; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080; } }
local expires = 3600 * 24 -- 1 day ngx.header["Set-Cookie"] = "session=blah; Path=/; Expires=" .. ngx.cookie_time(ngx.time() + expires)
local curl = require "curl" local request = curl.easy_init() local request_url = 'https://httpbin.org/post' local request_post_data = 'test=1&test2=2' local request_headers = { "Connection: close", "Accept: application/json", "Cache-Control: no-cache", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Content-Length: " .. string.len(request_post_data), } local responce_headers_chunks = {} local responce_data_chunks = {} local responce_headers = "" local responce_data = "" -- ------------------------------------------------------------------ request:setopt(curl.OPT_URL, request_url) request:setopt(curl.OPT_HTTPHEADER, request_headers) request:setopt(curl.OPT_POST, 1) request:setopt(curl.OPT_POSTFIELDS, request_post_data); request:setopt(curl.OPT_CONNECTTIMEOUT, 10) request:setopt(curl.OPT_FOLLOWLOCATION, 1) request:setopt(curl.OPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36") request:setopt(curl.OPT_SSL_VERIFYPEER, 0) request:setopt(curl.OPT_HEADERFUNCTION, function (param, buf) table.insert(responce_headers_chunks, param) return buf end) request:setopt(curl.OPT_WRITEFUNCTION, function (param, buf) table.insert(responce_data_chunks, param) return buf end) assert(request:perform()) responce_headers = table.concat(responce_headers_chunks) responce_data = table.concat(responce_data_chunks) -- ------------------------------------------------------------------ local json = require('cjson') print(responce_headers) print(responce_data) print(json.decode(responce_data)['form']['test'])