2014-10-18 4 views
1

Что я пытаюсь сделать для PoC и должен добавить href к веб-страницам, поступающим с динамического серверного сервера. Добавление href легко с помощью «subs_filter», но мне нужно использовать информацию, встроенную в ответ, для построения href.Nginx lua изменить html-ответ после proxy_pass

Можно ли использовать LUA для обработки ответа от proxy_pass, изменить его и вернуться к реквестору (клиенту)?

Любые предложения приветствуются.

Ниже приведен код, на который я смотрю, теперь я лучше понимаю Lua и как его использует nginx. Я вижу, что «body_filter» - правильный способ. Однако код кажется достаточно простым, но я не могу заставить регулярное выражение работать.

Дальше, я пытаюсь проанализировать возвращаемый ответ proxy_pass, проанализировать его для начала и конца времени, а затем построить URL-адрес сценария JS, помещенный в голову.

Пример ответа, который я хочу повторно задать.

Informações Adicionais 
    Horário de início: 08H50 
    Horário de término: 09H14 

код из в «месте {}»

body_filter_by_lua ' 
     -- my regex which is validate but doesn't seem to be within LUAJIT 
     --local from, to, err = ngx.re.find(ngx.arg[1], "(.início: *\d{2}H\d{2})", "jo") 
     local from, to, err = ngx.re.find(ngx.arg[1], "início", "jo") 

     replacestr = string.sub(ngx.arg[1], to, 5) 

     replaceme = "<script></script></head>" 
     ngx.arg[1] = ngx.re.sub(ngx.arg[1],"</head>", replaceme) 
    '; 

изменяющемся «INICIO» до «головы», например, работает, поэтому я предполагаю, что это на подчеркнутый символ, но я не удалось найти подтверждение этого.

Изменение "INICIO" к "\ d {2} H \ d {2}" не получится, "body_filter_by_lua: 5: недопустимой последовательности эвакуации вблизи« ""

+0

Добро пожаловать в SO. Какие исследования вы сделали? – MickyD

+0

Я пытаюсь использовать 'content_by_lua', также 'ngx.location.capture' и другие методы. Я, наконец, нашел, возможно, то, что я ищу, которое должно использовать «body_filter_by_lua» и установить «ngx.header.content_length = nil». –

+0

Спасибо Энди, эта информация помогает другим, кто может помочь в целом. Это здорово, что вы думаете, что нашли решение. Если у вас есть это, подумайте о том, чтобы опубликовать его как «ответ» ниже для себя, только если другие могут столкнуться с одной и той же проблемой по треку. Вы должны уметь «отмечать» его как _an answer_. Спасибо buddy – MickyD

ответ

0

я обнаружил, что я говорил в комментарии относительно «nix.header.content_length» и, что важно, nginx и lua требуют двойного экранирования, см. ниже: lua-nginx-module special pcre sequences.

Для акцентированных символов нужен флаг 'u', добавленный в 'jo' 'ngx.re. найти '

0

пользователь "body_filter_by_lua_file"

Эквивалент body_filter_by_lua, за исключением того, что указанный файл содержит код Lua или, как из версии v0.5.0rc32, байт-код Lua/LuaJIT для выполнения.

При указании относительного пути, например foo/bar.lua, они будут преобразованы в абсолютный путь относительно пути префикса сервера, определяемого параметром командной строки -p PATH при запуске сервера Nginx.

Эта директива была впервые представлена ​​в версии v0.5.0rc32.

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