Обработка HTTP-запросов в Lua
Получайте заголовки, тело и аргументы запроса и формируйте ответы с помощью API ngx.
«Обработка HTTP-запросов в Lua» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Чтение метода и URI запроса
Получите метод HTTP и URI из пространства имён ngx.
-- content_by_lua_block
local method = ngx.req.get_method()
local uri = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)Чтение заголовков запроса
ngx.req.get_headers() возвращает таблицу заголовков запроса.
local headers = ngx.req.get_headers()
local auth = headers["Authorization"]
if not auth then
ngx.status = 401
ngx.say("Unauthorized")
ngx.exit(ngx.HTTP_UNAUTHORIZED)
endЧтение параметров запроса
ngx.req.get_uri_args() возвращает таблицу параметров запроса URL.
local args = ngx.req.get_uri_args()
local page = tonumber(args.page) or 1
local size = tonumber(args.size) or 20
ngx.say("Page: " .. page .. ", Size: " .. size)Чтение тела запроса
Прочитайте тело запроса после явного вызова ngx.req.read_body().
ngx.req.read_body()
local body = ngx.req.get_body_data()
if not body then
ngx.status = 400
ngx.say("Empty body")
return
endРазбор тела JSON
Используйте библиотеку JSON, например cjson, чтобы разобрать тело запроса.
local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local ok, data = pcall(cjson.decode, body)
if not ok then
ngx.status = 400
ngx.say("Invalid JSON")
return ngx.exit(400)
endУстановка заголовков ответа
Установите заголовки ответа через ngx.header до вызова ngx.say или ngx.print.
ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_idЗапись ответа
ngx.say(s) записывает строку и перевод строки. ngx.print(s) записывает строку без перевода строки. ngx.exit(code) завершает запрос с указанным статусом HTTP.
ngx.status
Установите код статуса HTTP через ngx.status = 404 до записи тела ответа.
ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))Внутренние перенаправления
ngx.exec("/other/path") выполняет внутреннее перенаправление к другому блоку location Nginx без дополнительного обмена данными по HTTP.
Вложенные запросы
ngx.location.capture("/api") отправляет вложенный запрос к другому location и возвращает таблицу со статусом, заголовками и телом.
local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
ngx.exit(403)
endОбщий контекст запроса
ngx.ctx — это таблица для каждого запроса, предназначенная для обмена данными между обработчиками разных фаз (доступ → содержимое → log).
Вопрос об обработке HTTP
Какая функция считывает параметры запроса URL в OpenResty?
Итоги: обработка HTTP-запросов
Используйте функции ngx.req, чтобы читать метод, заголовки, параметры запроса и тело. Устанавливайте ngx.header и ngx.status до записи ответа. Используйте ngx.say/ngx.print для вывода. Обменивайтесь данными запроса через ngx.ctx.
Часто задаваемые вопросы
Урок «Обработка HTTP-запросов в Lua» бесплатный?
Да — полный текст урока «Обработка HTTP-запросов в Lua» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Обработка HTTP-запросов в Lua»?
Получайте заголовки, тело и аргументы запроса и формируйте ответы с помощью API ngx. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Обработка HTTP-запросов в Lua»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура OpenResty
- Обработка HTTP-запросов в Lua
- Сокеты-сопрограммы и неблокирующий TCP
- Словари общей памяти