nginx+lua access_by_lua_질문
3564 단어 nginx
2. 문제 설명 은 해당 nginx + lua 자료 에 따라 설정 한 후에 모든 것 이 순 조 롭 고 정상 적 인 방문 이 가능 합 니 다.그러나 전단, 모 바 일 개발 자 에 게 연락 을 할 때 간접 적 으로 404 요청 상황 이 빈번히 발생 한다. 같은 인터페이스 요청 파라미터 가 같 고 요청 시간 대가 다 르 면 404 보고 상황 이 간접 적 으로 발생 한다. 404 가 발생 할 때 nginx 에서 오 류 를 보고 하 는 정 보 는 다음 과 같다.
2020/01/02 17:16:51 [error] 506478#0: *2183 open() "/export/Instances/Logs/runtime/api/timer/info" failed (2: No such file or directory), client: xx.xx.xx.xx, server: www.timer.com, request: "GET" .......
오류 정 보 를 보면 404 오류 가 발생 했 을 때 요청 은 nginx 에서 정적 파일 의 역방향 대 리 를 직접 찾 는 것 입 니 다.lua 스 크 립 트 에 실행 로그 정 보 를 인쇄 했 습 니 다. 404 오류 가 발생 했 을 때 lua 스 크 립 트 가 정상적으로 실행 되 었 습 니 다.이 문제 가 간접 적 으로 발생 하여 문제 조사 의 난이 도 를 크게 증가 시 켰 다.
3. 해결 방안 은 먼저 해결 방안 을 말 하고 nginx 에서 lua 스 크 립 트 가 져 오기 방식 을 수정 합 니 다. 상세 한 것 은 다음 과 같 습 니 다. 오류 방식 (404) 이 나타 납 니 다.
location / {
default_type 'application/json';
charset utf-8;
lua_code_cache on;
access_by_lua_file /export/Instances/timer/runtime/lua/timer.lua;
}
올 바른 방식:
location / {
default_type 'application/json';
charset utf-8;
lua_code_cache on;
content_by_lua_file /export/Instances/timer/runtime/lua/timer.lua;
}
access_by_lua: 접근 요청 단계 에서 처리 하고 접근 제어 에 사용 하 며 http, server, location, location ifcontent 에 적 용 됩 니 다.by_lua: 콘 텐 츠 프로세서 입 니 다. 요청 을 받 고 출력 응답 을 받 습 니 다. location, location if 주 에 적 용 됩 니 다. 제 솔 루 션 은 accessby_lua 와 content_by_lua 자료 가 상대 적 으로 적 고 가장 근본 적 인 원인 에 대해 저 는 아직 4. 조사 와 정리 노트 1. 초기 에 고려 한 것 은 배치 때 문 이라는 것 을 알 지 못 했 습 니 다. lua_code_cache on, lua 스 크 립 트 가 캐 시 되 어 생 긴 것 입 니 다. 문제 의 근본 원인 이 아 닙 니 다.lua_code_cache: 명령 에 있 는 Lua 코드 의 Lua 코드 캐 시 를 사용 하거나 사용 하지 않 습 니 다.닫 을 때, ngxlua 가 제공 하 는 모든 요청 은 하나의 Lua VM 인 스 턴 스 에서 실 행 됩 니 다. 인 용 된 Lua 파일 은 캐 시 되 지 않 고 사용 하 는 Lua 모듈 은 처음부터 불 러 옵 니 다.오픈 시 lua 스 크 립 트 가 캐 시 됩 니 다. reload nginx 가 있어 야 업 데 이 트 된 lua 스 크 립 트 가 적 용 됩 니 다.
2. lua 스 크 립 트 오류 로 인 한 것 을 고려 하여 lua 스 크 립 트 북 에 많은 로 그 를 인쇄 했 습 니 다. 마지막 으로 404 오류 가 발생 했 을 때 lua 스 크 립 트 는 정상적으로 실 행 될 수 있 습 니 다. 출력 로그 정보 기록 상용 명령:
--- header
local reqHeaders = ngx.req.get_headers();
----
local reqType= ngx.var.request_method;
--- cookie
local reqCookie = reqHeaders["cookie"];
local pcIp = ngx.var.cookie_pcip;
local appIp = ngx.var.cookie_appip;
-- URL
local requestUri = ngx.var.request_uri;
--
local requestHost = ngx.var.host;
5. 미 완성 계속 access 찾기by_lua 화해시키다 content_by_lua 설정 에 관 한 자료 이상 의 문제 에서 lua 반환 코드 는 다음 과 같 습 니 다.
local timerHttp = require "resty.http"
---Post
local function http_post(url,headerParm,body,timeout)
local httpc = timerHttp.new();
timeout = timeout or 30000;
httpc:set_timeout(timeout);
local res, err_ = httpc:request_uri(url, {
method = "POST",
body = body,
keepalive=false,
headers = headerParm;
})
httpc:set_keepalive(5000, 100)
return res,err_;
end
local reqResult,reqErr = http_post(nowUrl,reqHeaders,reqBody,30000);
if(reqResult.status==200) then
ngx.say(reqResult.body);
return ;
else
ngx.say(reqErr);
return ;
end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.