nginx post body 값 가 져 오기

2537 단어 nginx
1. 현상
   nginx 에서 $request 를 이용 하고 싶 습 니 다.body 명령 은 post 가 요청 한 body 인 자 를 가 져 오고 로 그 를 떨 어 뜨 립 니 다. 그러나 이 변 수 는 비어 있 습 니 다. 홈 페이지 에서 $request 를 보십시오.body 의 설명 은 다음 과 같 습 니 다.
$request_body     request body     The variable’s value is made available in locations processed by the proxy_pass, fastcgi_pass, uwsgi_pass, and scgi_pass directives when the request body was read to a memory buffer. location 에서 만 proxy 를 사용 한 다 는 뜻 입 니 다.pass,fastcgi_pass,scgi_pass 명령 을 사용 할 때 이 변 수 는 값 이 있 습 니 다.
2. proxy 사용pass,fastcgi_pass, scgi_pass 등 명령 획득 $requestbody 값
해 봤 는데 proxy패스, 그 럴 수 있어 요.설정 은 다음 과 같 습 니 다:
curl 명령 으로 post 요청 시 뮬 레이 션
worker_processes  1;        #nginx worker   
error_log logs/error.log;   #          
events {
    worker_connections 1024;
}

http {
    log_format  dm  ' "$request_body" ';

    upstream bk_servers_2 {
        server 127.0.0.1:6699;
    }

    server {
        listen 6699;
        location /post/ {
            proxy_pass http://bk_servers_2/api/log/letv/env;
            access_log /home/shuhao/openresty-test/logs/post.log dm;
        }
        location /api/log/letv/env {
            return 202;
        }
    }
}

로그 용 결과 출력:
curl -i  -d "arg1=1&arg2=2" "http://127.0.0.1:6699/post/"

3. lua 로 $request 획득body 값
조건: openresty 나 nginx 를 사용 하여 lua 모듈 을 컴 파일 했 습 니 다.
방법:
    server 중 lua 사용need_request_body on; 또는 location lua 코드 블록 에 ngx. req. read 를 사용 합 니 다.body()
주의:
    1) lua 코드 블록 에 실행 문 이 있어 야 합 니 다. 그렇지 않 으 면 lua 가 실행 하지 않 으 면 request 를 가 져 올 수 없습니다.body;
    2) return 200 을 사용 하지 마 십시오.명령 을 기다 리 면 return 명령 이 있 고 lua 코드 는 실행 되 지 않 습 니 다.
 "arg1=1&arg2=2" 

4. 사용자 정의 변수 저장 request body
방법:
    1) server 블록 에 set $resp 사용body ""; 변수 설명 하기;
    2) location 에서 사용  ngx.var.resp_body = ngx.req.get_body_data() or "-"    변수 할당
worker_processes  1;        #nginx worker   
error_log ~/openresty-test/logs/error.log debug;   #          
events {
    worker_connections 1024;
}

http {
    log_format  dm  '"$request_body"';
    lua_need_request_body on;
    server {
        listen 6699;
        location /post/ {
            content_by_lua '
                ngx.say("-------")
                ngx.req.read_body()
            ';
            access_log ~/openresty-test/logs/post.log dm;
            #return 200;
        }
    }
}

좋은 웹페이지 즐겨찾기