Siapkan gerbang halaman proxy dengan nginx
Di akhir tutorial ini gerbang akan berjalan di depan sebuah situs di balik nginx: pengunjung yang belum diloloskan dikirim ke sebuah verifikasi, lulus darinya men-set cookie, dan permintaan berikutnya lewat langsung. Kamu akan mengamati keseluruhannya dulu dalam mode pratinjau, jadi tak ada yang diblokir sampai kamu memastikan penyambungan. Di sini dipakai nginx; resep Traefik, Caddy, dan Authelia mengikuti bentuk yang sama.
1. Nyalakan mode pratinjau
Di dasbor, buka tim dan nyalakan mode pratinjau. Selagi ia menyala, otorisator gerbang mencatat keputusan tantangan lawan lolos langsung ke halaman statistik tapi tak pernah memblokir. Kamu akan mematikannya di akhir.
2. Aktifkan gerbang pada kunci situsmu
Buka kunci situsmu dan pergi ke halaman Gerbang proxy. Nyalakan Status → Aktif, lalu atur:
- Jenis tantangan: Main game (default) atau Konfirmasi dengan kotak centang. Kunci situs yang mewajibkan game selalu menampilkan game, dan halaman itu mengatakannya. Memilih game butuh setidaknya satu game terpasang dengan artefak yang bisa diputar ulang.
- TTL izin lewat: berapa lama satu penyelesaian meloloskan seorang pengunjung (default 30 menit). Lebih pendek berarti lebih banyak pemeriksaan ulang tapi jendela lebih kecil jika sebuah cookie dicuri.
- Mode gagal: apa yang proxy-mu lakukan saat tak bisa menjangkau otorisator Caputchin. Fail-closed memblokir (lebih aman untuk portal login); fail-open meloloskan permintaan (menghindari waktu henti pada situs publik).
Biarkan Bahasa dan Tema pada ikuti pengunjung: verifikasi lalu berbicara dalam bahasa pengunjung, mengikuti preferensi terang atau gelapnya, dan membawa merek kunci situs ini secara otomatis. Di bawah Lanjutan kamu bisa mengganti nama cookie gerbang, memindahkan jalur callback, dan mempersempit gerbang ke jalur tertentu; penelusuran ini memakai nilai default. Lihat Sesuaikan tantangan.
Halaman itu juga menampilkan cuplikan nginx siap-salin dengan pengaturanmu sudah terisi. Pengaturan butuh sampai sepuluh detik untuk mencapai edge setelah kamu mengubahnya.
3. Izinkan origin yang kamu gerbangi
Verifikasi hanya mengalihkan balik ke sebuah origin yang diizinkan, daftar origin yang diizinkan yang sama dengan yang widget pakai. Pastikan ia menyertakan origin yang kamu gerbangi, misalnya https://auth.example.com. Setel pada konfigurasi Cap kunci situs jika belum ada di sana.
4. Sambungkan otorisator dan pengalihan ke tantangan
Dua blok location: sebuah sub-permintaan otorisator internal, dan sebuah pengalihan tantangan yang proxy loncati saat 401. Ganti YOUR_SITE_KEY dengan kunci publikmu.
# Gate the protected paths.
location / {
auth_request /_cpt_authz; # 204 = allow, 401 = challenge
error_page 401 = @cpt_challenge;
proxy_intercept_errors on;
error_page 500 502 503 504 = @cpt_unreachable;
# ...proxy_pass to your app...
}
location = /_cpt_authz {
internal;
auth_request off;
proxy_pass https://verify.caputchin.com/v1/gate/authz?site=YOUR_SITE_KEY;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header Cookie $http_cookie; # forward the cpt_gate cookie
proxy_connect_timeout 2s;
proxy_read_timeout 2s;
}
location @cpt_challenge {
return 302 https://verify.caputchin.com/v1/gate/challenge?site=YOUR_SITE_KEY&return=$scheme://$host$request_uri;
}
# This is your fail mode. `return 403` blocks when Caputchin is unreachable
# (fail closed); `return 204` lets the request through (fail open).
location @cpt_unreachable {
return 403;
}Otorisator hanya menjawab 204 atau 401, jadi apa pun selainnya, termasuk timeout, berarti Caputchin tak terjangkau dan mode gagal-mu yang menentukan. Salin cuplikan dari dasbor dan ia sudah cocok dengan mode gagal yang kamu pilih.
Gerbangi jalur masuk (HTML portal dan POST login). Jangan gerbangi sub-permintaan otorisator, health check, atau callback di bawah.
5. Tambahkan callback yang men-set cookie
Halaman verifikasi menyelesaikan dengan auto-mengirim sebuah POST kecil ke /__cpt/callback pada origin-mu (atau ke jalur callback apa pun yang kamu setel), dengan cpt_gate (pass) dan to (ke mana mengirim pengunjung) di body. Field itu bernama cpt_gate sekalipun kamu sudah mengganti nama cookie-nya. Sebuah handler mungil men-set cookie dan mengalihkan. Kontrak penuh, termasuk mengapa tiap atribut cookie penting, ada di resep reverse proxy. Minimalnya:
app.post("/__cpt/callback", express.urlencoded({ extended: false }), (req, res) => {
const pass = String(req.body.cpt_gate || "");
const to = String(req.body.to || "/");
const target = new URL(to, `https://${req.headers.host}`);
if (target.host !== req.headers.host) return res.status(400).end(); // same-origin only
res.setHeader(
"Set-Cookie",
`cpt_gate=${pass}; Path=/; HttpOnly; Secure; SameSite=Lax; Max-Age=1800`
);
res.redirect(303, target.pathname + target.search);
});6. Amati dalam pratinjau
Muat URL bergerbang. Karena pratinjau menyala, kamu lewat langsung, tapi halaman statistik mencatat sebuah challenge_served (kamu tak punya cookie) dan, begitu kamu menyelesaikan dan callback berjalan, sebuah pass_issued. Muat ulang dan kamu mestinya melihat passthrough menanjak. Jika tantangan tak pernah muncul, blok otorisator tak terkena; jika callback memberi 400, periksa origin to.
7. Terjunkan langsung
Saat angka-angka terlihat benar, matikan mode pratinjau. Gerbang kini menegakkan: pengunjung yang belum diloloskan dikirim ke game, pengunjung yang menyelesaikan menjelajah sampai pass mereka kedaluwarsa.
Ke mana selanjutnya
- Resep reverse proxy: Traefik, Caddy, dan penelusuran lengkap Authelia.
- Statistik gerbang halaman proxy: apa arti tiap angka begitu kamu langsung.
- Ikhtisar: konsepnya dan apa yang sengaja tak dilakukan gerbang.