Одна из очень классных вещей о Nginx заключается в том, что вы можете взять под контроль то, что она делает, введя сценарий Lua на разных этапах обработки запроса. Я успешно использовал директиву rewrite_by_lua/file для проверки тела входящего запроса и ввода дополнительных заголовков запросов для последующей обработки PHP. напримерNginx Lua Scripting
location /api{
rewrite_by_lua_file "/path/to/rewrite.lua";
lua_need_request_body "on";
}
, а затем в rewrite.lua
local uri = ngx.var.request_uri;
//examine the URI and inject additional headers
ngx.req.set_header('headerName','headerValue');
Что я может также сделать на данном этапе вводить заголовки ответа. Например,
local cookieData = "cookieName=value;path=/;";
ngx.header['Set-Cookie'] = cookieData;
Проблем пока нет, но это не совсем то, что я хочу сделать. Рабочий процесс, я имею в виду, идет как этот
- Изучение URI & INJECT экстренное запрос на заголовки.
- Мои PHP скрипты изучить дополнительные заголовки запросов, обрабатывать поступающие данные по мере необходимости и может вводить дополнительные заголовки ответа
- Затем я хочу исследовать заголовки ответа в другом сценарии Nginx Lua и впрыснуть печенье на этой стадии.
Ввод дополнительных заголовков ответов через мой PHP-скрипт не является проблемой. Я думал, что для того, чтобы исследовать эти дополнительные заголовки, я бы просто нужно настроить
location /api {
header_filter_by_lua_file "path/to/header.lua";
}
с header.lua
делают такие вещи, как
local cookieData = "cookieName=value;path=/;";
ngx.header['Set-Cookie'] = cookieData;
Принцип звучит идеально. Тем не менее, я считаю, что мои директивы header_filter_by_lua_file
просто игнорируются - никаких ошибок в журнале Nginx не возникает, когда я перезагружаю конфигурацию.
Я должен делать что-то неправильно здесь, но я не вижу, что это может быть. Я использую nginx 1.6.2
на Ubuntu 14.10 (x64). Nginx был установлен с apt-get install nginx-extras
.
Я был бы очень признателен всем, кто может объяснить, как правильно получить header_filter_by_*
.
Я не Vanilla Nginx. У меня есть [Nginx-extras] (http://packages.ubuntu.com/trusty/nginx-extras), установленный на Ubuntu. Я понимаю, что это Nginx с установленным модулем lua. Как я уже сказал в моем вопросе 'rewrite_by_lua_file' и' ngx.', оба работают отлично. Проблема заключается в 'header_by_lua ...'. Вы предлагаете, чтобы последний был доступен только с OpenResty not _even_ с ** Nginx Extras **? – DroidOS