2015-12-01 10 views
3

Одна из очень классных вещей о 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_*.

ответ

0

Это не особенность ванильного nginx. Вам нужно установить openresty (вместо nginx).

См http://openresty.org/#Download, а затем http://openresty.org/#Installation

+0

Я не 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

Смежные вопросы