Rumah  >  Soal Jawab  >  teks badan

luajit - Masalah dengan nginx+lua mendapatkan parameter POST

Tuan yang dihormati, saya perlu menentukan parameter dalam url untuk mendapatkan nilai parameter perkhidmatan Url mempunyai permintaan GET dan POST. Saya melakukannya menggunakan nginx+lua. Kodnya adalah seperti berikut:

        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;
        }

Masalahnya sekarang ialah apabila saya meminta menggunakan GET, semuanya normal, tetapi apabila meminta menggunakan POST, Nginx melaporkan ralat 500.

Saya menggunakan kod berikut untuk nyahpepijat:

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

Nilai parameter perkhidmatan yang dicetak dalam kaedah permintaan GET dan POST adalah betul.

Sekarang saya tidak tahu di mana masalahnya? Minta Allah beritahu saya. kesyukuran. . .

黄舟黄舟2713 hari yang lalu1099

membalas semua(3)saya akan balas

  • 为情所困

    为情所困2017-05-16 17:18:40

    Apabila anda menggunakan set_by_lua, jika ia adalah penyerahan POST, apabila memanggil ngx.req.read_body(), read_body dalam modul set_by_lua dilarang dipanggil (gagal menjalankan set_by_lua: set_by_lua:6: API dilumpuhkan dalam konteks daripada set_by_lua
    susun balik tindanan: [C]: dalam fungsi 'read_body' set_by_lua:6: dalam fungsi <set_by_lua:1>);
    Tetapi anda boleh menggunakan rewrite_by_lua, seperti:
    lokasi / {

               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;
        }
    

    Semoga ia dapat membantu anda Selain itu, adalah disyorkan untuk tidak menggunakan $service sebagai nama pembolehubah Mungkin kata kunci bercanggah dengan pembolehubah sistem.

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 17:18:40

    Sila beri saya nasihat daripada poster asal. Saya tidak tahu mengapa ngx.req.get_post_args() saya tidak pernah mendapat nilai, tetapi ngx.req.get_body_data() dapat. Apakah sebabnya?

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:18:40

    ngx.req.get_post_args() hanya boleh digunakan dalam peringkat rewrite_by_lua, access_by_lua, content_by_lua* dan anda perlu memanggil ngx.req.read_body() sebelum digunakan atau hidupkan pilihan
    lua_need_request_body untuk memaksa modul ini untuk membaca badan permintaan ( Kaedah ini tidak disyorkan)

    balas
    0
  • Batalbalas