ngx_Lua 모듈 의 재 설정

4053 단어
Nginx 에서 재 설정 을 실현 하려 면 rewrite 명령 을 통 해 구체 적 으로 를 참고 할 수 있 습 니 다.
 
Lua 모듈 을 통 해서 도 같은 기능 을 할 수 있 습 니 다. Lua 모듈 은 관련 API 를 제공 하여 방향 을 바 꾸 는 기능 을 합 니 다. 주로 다음 과 같 습 니 다.
 
>ngx.exec
 
문법: ngx. exec (uri, args?)
주로 내부 의 방향 을 바 꾸 고 아래 의 rewrite 명령 과 같다.
rewrite regrex replacement last;
 
예:
ngx.exec('/some-location');
ngx.exec('/some-location', 'a=3&b=5&c=6');
ngx.exec('/some-location?a=3&b=5', 'c=6');

 
주의:
1. 주어진 uri 가 이름 을 딴 location 이 라면 args 는 자동 으로 무 시 됩 니 다. 다음 과 같 습 니 다.
location /foo {
    content_by_lua ' ngx.exec("@bar"); ';
}
 
location @bar {
    ...
}

 
2. args 인 자 는 string 형식 으로 제시 할 수도 있 고 lua table 형식 으로 제시 할 수도 있 습 니 다. 다음 과 같 습 니 다.
ngx.exec("/foo","a=3&b=hello%20world")
ngx.exec("/foo",{ a= 3, b="hello world"})
 
3. 이 방법 은 주동 적 으로 돌아 오지 않 기 때문에 이 방법 을 호출 할 때 return 을 표시 하 는 것 이 좋 습 니 다. 다음 과 같 습 니 다.
return ngx.exec(...)
 
4. 이 방법 은 ngx. redirect 방법 과 달리 추가 적 인 네트워크 트 래 픽 이 발생 하지 않 습 니 다.
 
>ngx.redirect
 
문법: ngx. redirect (uri, status?)
이 방법 은 클 라 이언 트 에 게 301 / 302 방향 을 되 돌려 줍 니 다. 구체 적 으로 301 인지 302 인지 설정 한 status 값 에 달 려 있 습 니 다. status 값 을 지정 하지 않 으 면 기본 값 은 302 ngx.HTTP_MOVED_TEMPORARILY 로 되 돌아 갑 니 다. 그 등가 는 아래 의 rewrite 명령 입 니 다.
rewrite ^ /foo? permanent;# nginx config
 
301 로 돌아 가면 다음 rewrite 명령 과 같 습 니 다.
rewrite ^ /foo? redirect;# nginx config
 
ngx. location. capture * 와 의 차이 점 에 주의해 야 합 니 다.
ngx. location. capture * 는 주로 하위 요청 방식 으로 location 의 재 정립 을 실현 하 는데 위의 두 가지 방법 과 완전히 다르다.
Subrequests are completely different from HTTP 301/302 redirection (viangx.redirect) and internal redirection (viangx.exec).
 
> ngx.req.set_uri
 
문법: ngx. req. seturi(uri, jump?)
 
인자 uri 를 통 해 현재 요청 한 uri 를 다시 쓰기;인자 jmp, locations 의 재 일치 여 부 를 표시 합 니 다.jmp 가 true 일 때 ngx. req. set 를 호출 합 니 다.uri 후, nginx 는 수 정 된 uri 에 따라 새로운 locations 와 다시 일치 합 니 다.jmp 가 false 라면 현재 요청 한 URI 를 수정 한 것 이 아니 라 locations 의 재 매 칭 을 하지 않 습 니 다.jump 의 기본 값 은 false 입 니 다.
 
jump 는 true 로 rewrite... last 와 같 습 니 다.
jump 는 false 로 rewrite... break 와 같 습 니 다.
 
예 를 들 면:
ngx.req.set_uri("/foo", true)
등가
rewrite ^ /foo last;
 
rewrite ^ /foo break;
등가
ngx.req.set_uri("/foo", false)  혹은 ngx. req. seturi("/foo")
 
(전문 완료)

좋은 웹페이지 즐겨찾기