luajit - POST 매개변수를 가져오는 nginx+lua 관련 문제
黄舟
黄舟 2017-05-16 17:16:40
0
3
1035

마스터 여러분, URL에 GET 및 POST 요청이 있는 서비스 매개변수의 값을 얻으려면 URL의 매개변수를 결정해야 합니다. nginx+lua를 사용해서 해봤습니다. 코드는 다음과 같습니다:

으아아아

이제 문제는 GET을 사용하여 요청하면 모든 것이 정상이지만 POST를 사용하여 요청하면 Nginx에서 500 오류를 보고한다는 것입니다.

다음 코드를 사용하여 디버깅합니다.

으아아아

GET 및 POST 요청 메소드에 인쇄된 서비스 매개변수의 값이 정확합니다.

이제 문제가 어디에 있는지 모르겠습니다. 하나님께 말씀해 달라고 구하세요. 고마움. . .

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답 (3)
为情所困

当你使用set_by_lua时,如果是POST提交,在调用ngx.req.read_body()时,set_by_lua模块中read_body是被禁止调用的( failed to run set_by_lua: set_by_lua:6: API disabled in the context of set_by_lua
stack traceback: [C]: in function 'read_body' set_by_lua:6: in function );
但是你可以使用rewrite_by_lua,如:
location / {

set $service ''; rewrite_by_lua ' local request_method = ngx.var.request_method if request_method == "GET" then local arg = ngx.req.get_uri_args()["service"] or 0 ngx.var.service = arg elseif request_method == "POST" then ngx.req.read_body() local arg = ngx.req.get_post_args()["service"] or 0 ngx.var.service = arg end;'; if ($service = 'register') { proxy_pass http://userinfo; } proxy_redirect off; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

希望能够帮到你,另外建议变量名字不要取$service,可能是关键字与系统变量有冲突。

    phpcn_u1582

    楼主请教一下。不知道为什么我的ngx.req.get_post_args()一直获取不到值,但ngx.req.get_body_data()可以。可能是什么原因呢?

      给我你的怀抱

      ngx.req.get_post_args()只能在rewrite_by_lua, access_by_lua, content_by_lua*阶段使用,且在使用前需要先调用ngx.req.read_body(),或打开
      lua_need_request_body 选项强制本模块读取请求体(此方法不推荐)

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!