luajit - Problème avec nginx+lua pour obtenir les paramètres POST
黄舟
黄舟 2017-05-16 17:16:40
0
3
1137

Chers maîtres, j'ai besoin de déterminer les paramètres dans l'url pour obtenir la valeur du paramètre de service. L'url a des requêtes GET et POST. Je l'ai fait en utilisant nginx+lua. Le code est le suivant :

        location / {
                set_by_lua $service '
                        local request_method = ngx.var.request_method
                        if request_method == "GET" then
                                local arg = ngx.req.get_uri_args()["service"] or 0
                                return arg
                        elseif request_method == "POST" then
                                ngx.req.read_body()
                                local arg = ngx.req.get_post_args()["service"] or 0
                                return 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;
        }

Le problème maintenant est que lorsque je demande en utilisant GET, tout est normal, mais lors d'une demande en utilisant POST, Nginx signale une erreur 500.

J'utilise le code suivant pour déboguer :

local request_method = ngx.var.request_method
if request_method == "GET" then
        local arg = ngx.req.get_uri_args()["service"] or 0
        ngx.say(arg)
elseif request_method == "POST" then
        ngx.req.read_body()
        local arg = ngx.req.get_post_args()["service"] or 0
        ngx.say(arg)
end

Les valeurs des paramètres de service imprimées dans les méthodes de requête GET et POST sont correctes.

Maintenant, je ne sais pas où se situe le problème ? Demandez à Dieu de me le dire. gratitude. . .

黄舟
黄舟

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

répondre à tous(3)
为情所困

Lorsque vous utilisez set_by_lua, s'il s'agit d'une soumission POST, lors de l'appel de ngx.req.read_body(), il est interdit d'appeler le read_body dans le module set_by_lua (échec de l'exécution de set_by_lua : set_by_lua:6 : API désactivée dans le contexte de set_by_lua
stack traceback : [C] : dans la fonction 'read_body' set_by_lua:6 : dans la fonction <set_by_lua:1>);
Mais vous pouvez utiliser rewrite_by_lua, tel que :
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;
    }

J'espère que cela pourra vous aider. De plus, il est recommandé de ne pas utiliser $service comme nom de variable. Il se peut que le mot-clé soit en conflit avec la variable système.

phpcn_u1582

Veuillez me donner quelques conseils à partir de l'affiche originale. Je ne sais pas pourquoi mon ngx.req.get_post_args() n'obtient jamais la valeur, mais ngx.req.get_body_data() le fait. Quelle pourrait en être la raison ?

给我你的怀抱

ngx.req.get_post_args() ne peut être utilisé que dans les étapes rewrite_by_lua, access_by_lua, content_by_lua*, et vous devez appeler ngx.req.read_body() avant utilisation, ou activer l'option
lua_need_request_body pour forcer ce module pour lire le corps de la requête (cette méthode n'est pas recommandée)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal