2014-10-18 4 views
1

PoC를 위해 무엇을하려하고 있으며 동적 백엔드 서버에서 오는 웹 페이지에 href를 추가합니다. "subs_filter"를 사용하면 href를 쉽게 추가 할 수 있지만 href를 작성하려면 응답에 포함 된 정보를 사용해야합니다.Nginx lua proxy_pass 후 html 응답 수정

LUA를 사용하여 proxy_pass에서 응답을 처리하고 수정 한 다음 요청자 (클라이언트)에게 반환 할 수 있습니까?

모든 제안을 환영합니다.

다음은 내가보고있는 코드입니다. 이제 Lua를 더 잘 이해하고 nginx에서 어떻게 사용하는지 보겠습니다. 'body_filter'가 올바른 방법임을 알 수 있습니다. 그러나 코드를 충분히 간단하게 보이지만 작동하도록 정규식을 가져올 수 없습니다.

추가 배경, 나는 반환 된 proxy_pass 응답을 구문 분석하고 시작 및 종료 시간에 구문 분석을 시도한 다음 JS 스크립트 URL을 머리에 배치합니다.

정규식을 사용하려는 응답의 예입니다. 예를 작동하기위한

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) 
    '; 

내에서의 코드"머리 "에, 그래서 그것은 악센트 문자입니다 있으리라 믿고있어하지만 난 이것에 대한 확인을 찾을 수 없습니다. "크리에이터"변경

에와 실패 "D {2} H의 \ (D)가 {2} \ "내가에서 언급 한 것을 발견했다 ' "

+0

안녕하세요. 어떤 연구를하셨습니까? – MickyD

+0

나는 'content_by_lua', 또한 'ngx.location.capture'및 다른 방법을 사용하려고 노력해 왔습니다. 결국 'body_filter_by_lua'를 사용하고 'ngx.header.content_length = nil'을 설정하는 것입니다. –

+0

감사합니다 Andy,이 정보는 일반적으로 도움을 줄 수있는 다른 사람들을 돕습니다. 해결책을 찾은 것 같아요. 당신이 그것을 가지고 있다면, 다른 사람들이 같은 문제를 트랙 아래로 흘릴 수있는 경우에 대비하여 자신의 아래에있는'대답 '으로 게시하는 것을 고려하십시오. 그것을 _an answer_로 '표시'할 수 있어야합니다. 고마워 친구 – MickyD

답변

0

"body_filter_by_lua : 근처에 잘못된 이스케이프 시퀀스 : 5 "' 'nix.header.content_length'에 대한 주석과 중요한 nginx 및 lua에 대한 자세한 내용은 이중 이스케이프가 필요합니다.

액센트 문자에는 'ngx.re. 찾기 '

0

사용자 "body_filter_by_lua_file"

에 의해 지정된 파일이 Lua 코드를 포함하거나 v0.5.0rc32 릴리스에서 실행될 Lua/LuaJIT 바이트 코드를 제외하면 body_filter_by_lua와 같습니다.

foo/bar.lua와 같은 상대 경로가 주어지면 Nginx 서버를 시작하는 동안 -p PATH 명령 줄 옵션에 의해 결정된 서버 접두사 경로에 상대적인 절대 경로로 변환됩니다.

이 지시문은 v0.5.0rc32 릴리스에서 처음 소개되었습니다.

관련 문제