Rumah > Soal Jawab > teks badan
Butiran keperluan:
Perkhidmatan web dibahagikan kepada pelayan rasmi dan pelayan ujian Melalui proksi nginx, pengguna akan menghantar permintaan log masuk (kaedah pos) kepada nginx apabila mula-mula mengakses Melalui nginx, ia dinilai sama ada pengguna log masuk adalah pengguna ujian. Jika ia adalah pengguna ujian, ia akan dimajukan ke pelayan ujian.
Masalah yang dihadapi:
1. Selepas menentukan bahawa pengguna telah melaksanakannya, bagaimanakah permintaan seterusnya boleh dihantar ke pelayan yang sama? Saya ingin mencapai ini dengan menyimpan pembolehubah, tetapi pembolehubah nginx tidak boleh wujud merentas permintaan. Bolehkah saya menyimpan pembolehubah dengan membaca dan menulis fail? .
2. Bagaimana untuk melaksanakan kaedah lompat?
Di bawah ialah sebahagian daripada kod saya
Lawatan pertama 127.0.0.1/smdb
location /smdb {
default_type 'text/plain';
set $jump 0;
access_log /var/log/nginx/smdb_access.log smdb;
error_log /var/log/nginx/error.log;
log_subrequest on;
lua_need_request_body on;
client_max_body_size 50k;
client_body_buffer_size 50k;
content_by_lua '
ngx.req.read_body()
local args, err = ngx.req.get_post_args()
if not args then
ngx.say("failed to get post args: ", err)
return
end
for key, val in pairs(args) do
if val == "test" then
ngx.var.jump = "1"
end
end
ngx.exec("/tosmdb")
';
}
location /tosmdb {
default_type 'text/plain';
echo $jump;#注释掉下面,这里显示为1即判断出了用户
if ($jump = "1"){
proxy_pass http://smdbtest;
}
if ($jump = "0"){
proxy_pass http://smdb;
}
}
迷茫2017-05-16 17:28:13
Anda perlu meletakkan semua bukti kelayakan pengguna selepas log masuk ke dalam kuki, dan kemudian ia akan memudahkan untuk pengesahan.
Lihat contoh dalam https://github.com/cloudflare/lua-resty-cookie untuk mendapatkan butiran.
Menggunakan proxy_pass
untuk melompat sepatutnya tiada masalah, ia cukup bagus.