Node Unblocker Nedir ve Nasıl Kurulur?

Yayın tarihi:

13 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Adresi /proxy/https:// olan BROWSER penceresinden çıkan çizgi, noktalı /proxy/ elipsinden geçip TARGET sayfasına varıyor

Küçük bir Express uygulaması başlatıyor, tarayıcıda http://127.0.0.1:8080/proxy/https://example.com/ adresini açıyorsunuz ve sayfa kendi sunucunuzun adresi altında karşınıza geliyor. Sayfadaki linkler, görseller ve formlar artık /proxy/ ile başlıyor; her tıklama yeniden sizin sunucunuzdan geçiyor. Bu, npm'deki unblocker paketi, yani Node Unblocker: bir Node.js sunucusunu, herkesin sıradan bir tarayıcıyla kullanabileceği bir web proxy'ye çeviren birkaç satır kod. Açık bırakıldığında aynı satırlar yabancıların da sunucunuzu kullanmasının yolunu açar; ilk test sunucumuz, yerel bir servisin yalnızca 127.0.0.1 adresine gösterdiği bir yönetim sayfasını getirdi.

Bu yazıda paketin nasıl çalıştığını, en sade sunucuyu, yabancıları ve iç ağ adreslerini dışarıda tutan korumalı bir sunucuyu, giden trafik için upstream proxy kullanımını ve paketin sınırlarını anlatıyoruz. Bütün örnekleri 11 Ekim 2026'da unblocker 2.3.1, Express 4.22.3 ve Node.js 24.11.1 ile; yerel bir test sitesi, bir WebSocket yankı (echo) sunucusu ve kullanıcı adıyla parola isteyen bir test proxy'si üzerinde çalıştırdık.

Node Unblocker nedir?

Node Unblocker, Nathan Friedly'nin yazdığı ve npm'de unblocker adıyla yayımlanan açık kaynaklı bir Node.js kütüphanesidir. 11 Ekim 2026 itibarıyla en güncel sürüm, Haziran 2024 tarihli 2.3.1'dir; Node.js 16.17 veya üstünü ister ve AGPL-3.0 lisansıyla dağıtılır. GitHub'daki README onu, uzak web sayfalarını proxy'den geçirip yeniden yazan genel amaçlı bir kütüphane olarak tanımlar.

Kısacası bir web proxy'dir: başka web sitelerini sizin yerinize yükleyen bir web sitesi. Ziyaretçi hiçbir ayarı değiştirmez, yalnızca sunucunuzun adresini bilmesi yeter. HTTP veya SOCKS5 proxy ise uygulamada ya da işletim sisteminde tanımlanır ve trafiği değiştirmeden taşır. Node Unblocker yalnızca web sayfalarını ve WebSocket bağlantılarını taşır ve tek bir çıkışı vardır: çalıştığı makinenin IP adresi. Dizüstü bilgisayarınızda çalıştırırsanız site sizin ev IP'nizi görür.

Node Unblocker nasıl çalışır?

Yolu önekle (varsayılan olarak /proxy/) başlayan her istek şu adımlardan geçer:

  1. Tarayıcı sunucudan bir proxy adresi ister, örneğin GET /proxy/https://example.com/. Önekten sonraki her şey hedef adrestir. Şeması olmayan bir adres, örneğin /proxy/example.com, /proxy/http://example.com/ adresine 307 ile yönlendirilir.
  2. İstek middleware'leri çalışır. Yerleşik fonksiyonlar Host ve Referer başlıklarını, sıkıştırmayı ve çerezleri düzeltir. Ardından requestMiddleware dizisine sizin eklediğiniz fonksiyonlar çalışır; erişim kontrolleri buraya yazılır.
  3. Sunucunuz hedefe kendisi bağlanır ve tarayıcının başlıklarını gönderir; httpAgent veya httpsAgent tanımladıysanız bağlantı o ajan üzerinden kurulur. Hedef, sunucunuzun IP adresini görür.
  4. Cevap middleware'leri yanıtı düzenler. Content-Security-Policy, Strict-Transport-Security ve Public-Key-Pins başlıklarını kaldırır, yönlendirmeleri ve HTML ile CSS içindeki adresleri yeniden yazar, çerezleri /proxy/<site>/ yoluna taşır, sayfaya bir betik ekler ve NOINDEX, NOFOLLOW robots etiketi koyar.
  5. Sayfa tarayıcıya parça parça akar.
  6. Gözden kaçan linkler kurtarılır. /about gibi köke göre yazılmış bir istek öneksiz gelir; Node Unblocker Referer başlığını okur ve tam proxy adresine 307 ile yönlendirir.

Sayfaya eklenen betik fetch, XMLHttpRequest, WebSocket, yeni oluşturulan öğeler ve geçmiş (history) değişikliklerini sarar; böylece JavaScript'in sonradan ürettiği adresler de öneki alır. JavaScript dosyalarının kendisi yeniden yazılmaz. Mutlak, köke göre ve göreli birer link, protokolü belirtilmemiş bir görsel ve bir form içeren test sayfamız proxy'den şöyle döndü:

text
set-cookie: session=abc123; Path=/proxy/http://127.0.0.1:9000/; HttpOnly

<script src="/proxy/client/unblocker-client.js"></script>
<script>unblockerInit({"prefix":"/proxy/","url":"http://127.0.0.1:9000/"}, window);</script>
<title>Test page</title><meta name="ROBOTS" content="NOINDEX, NOFOLLOW"/>
<a href="/proxy/https://www.iana.org/help/example-domains">absolute</a>
<a href="/proxy/http://127.0.0.1:9000/about">root-relative</a>
<a href="contact">relative</a>
<img src="/proxy/http://cdn.example.net/logo.png">
<form action="/proxy/http://127.0.0.1:9000/login" method="post"></form>

Göreli link zaten proxy yolunun altında çözüldüğü için olduğu gibi kalır. Sayfanın Content-Security-Policy ve Strict-Transport-Security başlıkları tarayıcıya hiç ulaşmadı.

Forward ve reverse proxy'den farkı nedir?

Üçü de tarayıcı ile site arasında durur. Farkları, onları kimin kurduğu ve sayfayı değiştirip değiştirmedikleridir.

Node UnblockerForward proxyReverse proxy
Nasıl kullanılır?/proxy/ adresi açılırUygulamada veya işletim sisteminde host:port girilirSitenin kendi adresine gidilir
Kim kurar?Sunucuyu çalıştıranKullanıcı ya da şirketiSite sahibi
Sayfayı değiştirir mi?Evet: link, çerez, yönlendirmeHayırGenellikle hayır
HTTPSSizin sunucunuzda çözülürTünelden geçer, şifreli kalırSite sahibinde çözülür
TrafikWeb sayfaları ve WebSocketHer türlü HTTP; SOCKS5 UDP de taşırSitenin sunucularına HTTP(S)

Forward proxy, proxy ayarı olan her uygulamaya hizmet eder ve sayfayı anlaması gerekmez. Nginx gibi bir reverse proxy ise sizin kendi sitenizin önünde durur; ikisini Forward Proxy ve Reverse Proxy Arasındaki Fark yazımızda ayrıntılı anlattık. Node Unblocker bu ikisinden ayrılır: ayarı değiştirilemeyen ya da değiştirilmemesi gereken tarayıcılar için sayfayı yeniden yazan bir proxy'dir.

En sade Node Unblocker sunucusu nasıl kurulur?

Boş bir klasörde Express'i ve paketi kurun, ardından kodu server.mjs adıyla kaydedin:

bash
npm install express unblocker
js
import express from "express";
import Unblocker from "unblocker";

const app = express();
const unblocker = new Unblocker({ prefix: "/proxy/" });

// Unblocker ilk app.use() çağrılarından biri olmalı ve bir alt yolda değil, kökte durmalı
app.use(unblocker);

app.get("/", (req, res) => res.send("Open /proxy/https://example.com/"));

// upgrade dinleyicisi, Unblocker'ın WebSocket bağlantılarını aktarmasını sağlar
app.listen(8080, "127.0.0.1").on("upgrade", unblocker.onUpgrade);

node server.mjs ile başlatın ve http://127.0.0.1:8080/proxy/https://example.com/ adresini açın. README, middleware'in bir alt yola bağlanmaması gerektiğini söyler ve önek olarak / kullanmanın bazı uç durumlarda sorun çıkardığını belirtir. upgrade dinleyicisi olmadan, proxy'den açılan sayfalardaki sohbet kutuları ve canlı paneller bağlantı kuramaz.

Sunucu 127.0.0.1 adresini dinler, yani ona yalnızca sizin bilgisayarınız ulaşabilir; bu sürümü öyle bırakın. Testimizde sayfaları yükledi, bir 302 yönlendirmesini yeniden yazdı, bir form POST isteğini aktardı ve WebSocket mesajlarını yankıladı. Ayrıca test servisimizin yalnızca aynı makineye gösterdiği /proxy/http://127.0.0.1:9000/admin sayfasını da getirdi:

text
INTERNAL ADMIN PAGE - only for 127.0.0.1

Express 5. Paket Express 4'e bağımlı olduğu için testi Express 5.3.0 ile tekrarladık. Sayfalar, yönlendirmeler, formlar ve WebSocket aynı şekilde çalıştı; npm paketin içine ona özel bir Express 4 kopyası kurdu.

Açık bir Node Unblocker sunucusu neden tehlikelidir?

Açık bir sunucu, herkesin sizin IP adresinizden trafik göndermesine ve yalnızca sunucunuzun erişebildiği yerlere ulaşmasına izin verir:

  • Suç sizin IP'nize kalır. Sunucu üzerinden gönderilen form spam'i ve kaba kuvvet (brute force) giriş denemeleri sizin adresinizden gelir. Siteler bu adresi engeller ya da barındırma firmanıza şikâyet eder; firma da sunucuyu askıya alabilir.
  • İç ağınız erişilebilir olur. Buna SSRF (Server-Side Request Forgery, sunucu taraflı istek sahteciliği) denir: dışarıdaki biri, kendisinin ulaşamadığı bir adrese sunucunuzun istek atmasını sağlar. Bulut sunucularda klasik hedef, metadata servisinin kimlik bilgisi dağıttığı 169.254.169.254 adresidir. OWASP SSRF Önleme Rehberi, hedefler için bir izin listesi tutmayı ve her adın çözüldüğü IP'yi kontrol etmeyi önerir.
  • Sunucu her şeyi okur. Sayfaları yeniden yazabilmek için okuması gerektiğinden HTTPS sizin sunucunuzda sona erer; proxy'den açılan sitelere yazılan parolalar sunucudan açık metin olarak geçer.
  • Bütün siteler aynı origin'i paylaşır. Origin, protokol, alan adı ve porttan oluşan köken bilgisidir; proxy'den açılan siteler birbirinden yalnızca çerez yollarıyla ayrılır. MDN, çerezlerdeki Path özniteliğinin bir güvenlik önlemi olmadığını belirtir. Proxy'den açılan bir sayfadaki betik, başka bir sitenin HttpOnly olmayan çerezlerini okuyabilir.

Web proxy kimseye yeni bir hak da vermez. Onu okul ya da iş yeri filtresini veya bir sitenin kullanım şartlarını aşmak için kullanmak yine o kuralları çiğnemek demektir; sitenin robots.txt kuralları ve hız sınırları, sunucunuzdan gelen trafik için de diğer ziyaretçilerde olduğu gibi geçerlidir.

Node Unblocker sunucusu nasıl korunur?

Sunucuyu, belirli kişilerin kısa bir site listesi için kullandığı bir iç araç olarak düşünün. Korumalı sürüm şunları ekler:

  1. Giriş kontrolü: ekip için sabit sürede karşılaştırılan tek bir HTTP Basic girişi.
  2. Site izin listesi (allowlist): requestMiddleware içinde kontrol edilir ve yalnızca 80 ile 443 portlarına izin verir.
  3. Her DNS cevabının kontrolü: ajanların lookup fonksiyonunda yapılır, çünkü herhangi bir alan adı 127.0.0.1 adresini gösterebilir. Node'un net.BlockList sınıfı özel adres aralıklarını tutar ve IPv6 biçiminde yazılmış IPv4 adreslerini de yakalar.
  4. Başlık temizliği: ekibin Authorization başlığı ve X-Forwarded-For içindeki istemci IP'si siteye hiç ulaşmaz.
  5. WebSocket koruması: upgrade istekleri Express middleware'lerini atladığı için gereklidir.
  6. Hız sınırı, kayıt satırı ve sade bir hata sayfası.
bash
npm install express unblocker express-rate-limit

Ardından server.mjs dosyasını bu sürümle değiştirin:

js
import crypto from "node:crypto";
import dns from "node:dns";
import http from "node:http";
import https from "node:https";
import net from "node:net";
import express from "express";
import { rateLimit } from "express-rate-limit";
import Unblocker from "unblocker";

const { UI_USER, UI_PASS, PORT = "8080" } = process.env;
if (!UI_USER || !UI_PASS) throw new Error("Set UI_USER and UI_PASS");
const ALLOWED = ["example.com", "iana.org"]; // ekibin açabileceği siteler (alt alan adları dahil)

// 1. Proxy'nin asla bağlanmaması gereken aralıklar (loopback, özel ağ, link-local, bulut metadata)
const blocked = new net.BlockList();
for (const [range, bits] of [["0.0.0.0", 8], ["10.0.0.0", 8], ["100.64.0.0", 10], ["127.0.0.0", 8],
  ["169.254.0.0", 16], ["172.16.0.0", 12], ["192.168.0.0", 16]]) blocked.addSubnet(range, bits);
blocked.addAddress("::1", "ipv6");
blocked.addSubnet("fc00::", 7, "ipv6");
blocked.addSubnet("fe80::", 10, "ipv6");
const isBlockedIp = (ip) => blocked.check(ip, net.isIPv6(ip) ? "ipv6" : "ipv4");

// 2. Soket açılmadan önce her DNS cevabını kontrol et; izinli bir ad iç ağınızı gösteremesin
function safeLookup(hostname, options, callback) {
  dns.lookup(hostname, options, (err, address, family) => {
    if (err) return callback(err);
    const answers = Array.isArray(address) ? address : [{ address, family }];
    if (answers.some((a) => isBlockedIp(a.address))) {
      return callback(new Error(`${hostname} resolves to a blocked address`));
    }
    callback(null, address, family);
  });
}

// 3. Yalnızca izin listesindeki sunucular, yalnızca varsayılan 80/443 portları
function isAllowed(target) {
  const { hostname, port } = new URL(target);
  return port === "" && ALLOWED.some((h) => hostname === h || hostname.endsWith(`.${h}`));
}

// Sitenin görmemesi gereken başlıklar: ekibin girişi ve reverse proxy'nin eklediği istemci IP'si
const STRIP = ["authorization", "forwarded", "x-forwarded-for", "x-forwarded-host", "x-forwarded-proto", "x-real-ip"];

function checkTarget(data) {
  const ok = isAllowed(data.url);
  console.log(new Date().toISOString(), ok ? "ALLOW" : "DENY", data.url);
  if (ok) {
    for (const h of STRIP) delete data.headers[h];
    return;
  }
  if (data.clientResponse) return data.clientResponse.status(403).send("This site is not on the allowlist.");
  throw new Error("Blocked WebSocket target"); // upgrade isteklerinde cevap nesnesi yoktur
}

// 4. Ekip için tek ortak giriş (HTTP Basic), sabit sürede karşılaştırılır
const hash = (s) => crypto.createHash("sha256").update(s).digest();
function loginOk(req) {
  const [scheme, value = ""] = (req.headers.authorization ?? "").split(" ");
  const given = Buffer.from(value, "base64").toString();
  return scheme === "Basic" && crypto.timingSafeEqual(hash(given), hash(`${UI_USER}:${UI_PASS}`));
}

const unblocker = new Unblocker({
  prefix: "/proxy/",
  requestMiddleware: [checkTarget],
  httpAgent: new http.Agent({ lookup: safeLookup }),
  httpsAgent: new https.Agent({ lookup: safeLookup }),
});

const app = express();
app.set("trust proxy", "loopback"); // bu makinedeki reverse proxy gerçek istemci IP'sini iletir
app.use(rateLimit({ windowMs: 60_000, limit: 600 })); // tek bir sayfa onlarca dosya çekebilir
app.use((req, res, next) => {
  if (loginOk(req)) return next();
  res.set("WWW-Authenticate", 'Basic realm="preview"').status(401).send("Login required");
});
app.use(unblocker);
app.get("/", (req, res) => res.send("Open /proxy/https://example.com/"));
app.use((err, req, res, next) => {
  console.error(err.message);
  res.status(502).send("The site could not be loaded.");
});

// Yalnızca loopback'i dinle: HTTPS ve dışa açık port öndeki reverse proxy'nin işi
const server = app.listen(Number(PORT), "127.0.0.1");
// Express middleware'leri WebSocket upgrade isteklerinde çalışmaz; girişi burada da kontrol et
server.on("upgrade", (req, socket, head) => {
  if (!loginOk(req)) return socket.destroy();
  try {
    unblocker.onUpgrade(req, socket, head);
  } catch {
    socket.destroy();
  }
});

Giriş bilgilerini ortam değişkeniyle vererek başlatın: UI_USER=team UI_PASS='uzun-rastgele-bir-parola' node server.mjs. Sonuçlarımız şöyleydi:

  • Giriş yapılmadan her yol WWW-Authenticate: Basic başlığıyla 401 döndü.
  • example.com ve www.iana.org açıldı. example.org, evilexample.com, example.com:8443, 127.0.0.1:9000 ve 169.254.169.254 ise 403 aldı.
  • Herkese açık DNS'te 127.0.0.1 adresine çözülen localtest.me alan adını bir test kopyasının izin listesine eklediğimizde istek 502 ile döndü, kayıtta localtest.me resolves to a blocked address yazdı.
  • Girişsiz WebSocket bağlantısı hemen kapatıldı. Giriş yapılmış bağlantılardan yerel yankı sunucumuza giden DENY olarak kaydedilip kapatıldı; izin listesindeki echo.websocket.org adresine giden ise çalıştı.
  • Bir dakika içinde 600 istek dolduktan sonra gelen istekler Retry-After: 59 başlığıyla 429 Too Many Requests cevabı aldı.

Bu korumalardan ikisi, akla ilk gelen çözüm işe yaramadığı için eklendi. README'deki izin listesi örneği isteği data.clientResponse.status(403) ile reddeder; ama WebSocket upgrade isteğinde cevap nesnesi yoktur ve sunucumuz TypeError: Cannot read properties of null (reading 'status') hatasıyla çöktü. Boş değer kontrolü eklediğimizde sunucu ayakta kaldı, fakat WebSocket bağlantısı giriş yapılmadan engelli hedefe yine ulaştı. Middleware'de hata fırlatıp upgrade dinleyicisinde yakalamak bağlantıyı kurulmadan durdurur. STRIP listesini eklemeden önce ise test proxy'miz, ekibin Authorization: Basic başlığını ve test için gönderdiğimiz X-Forwarded-For değerini siteye giderken gördü.

HTTPS için sunucunun önüne, aynı makinede çalışan nginx ya da Caddy koyun; trust proxy ayarının loopback olması, Express'in ve hız sınırlayıcının gerçek istemci IP'sini görmesini sağlar. Nginx kullanıyorsanız README, /proxy/https:// içindeki // korunsun diye merge_slashes off; ayarını önerir. ALLOW ve DENY kayıt satırlarını saklayın; bir site sunucunuzun ne yaptığını sorduğunda cevap onlardadır.

Node Unblocker trafiği upstream proxy'den nasıl geçirilir?

Upstream proxy, sunucunuzun dışarı çıkarken kullandığı proxy'dir. httpAgent ve httpsAgent seçenekleri her türlü Node.js ajanını kabul eder; proxy'ye bağlanan bir ajan verdiğinizde çıkış noktası proxy'ye taşınır. http-proxy-agent ve https-proxy-agent paketlerini kurun, ardından korumalı sunucudaki iki ajan satırını değiştirin:

bash
npm install http-proxy-agent https-proxy-agent
js
import { HttpProxyAgent } from "http-proxy-agent";
import { HttpsProxyAgent } from "https-proxy-agent";

const UPSTREAM = process.env.UPSTREAM_PROXY; // http://user:pass@pr.proxynet.io:8000

const unblocker = new Unblocker({
  prefix: "/proxy/",
  requestMiddleware: [checkTarget],
  httpAgent: new HttpProxyAgent(UPSTREAM), // http:// hedefler: proxy'ye tam adresli istek
  httpsAgent: new HttpsProxyAgent(UPSTREAM), // https:// hedefler: proxy üzerinden CONNECT tüneli
});

user:pass isteyen test proxy'miz her hedef için bir satır kaydetti:

text
[test-proxy] CONNECT example.com:443 auth=user
[test-proxy] GET http://example.com/ auth=user fwd-authorization=- x-forwarded-for=-

HTTPS sayfası bir CONNECT tünelinden geçtiği için proxy yalnızca sunucu adını gördü; HTTP satırındaki tireler, temizlenen başlıkların siteye gitmediğini gösteriyor. Parola yanlış olduğunda iki sayfa da proxy'nin kendi 407 Proxy Authentication Required cevabını döndürdü. Paroladaki @, : veya / karakterlerini encodeURIComponent ile kodlayın. Aynı ajanların Axios, node-fetch ve undici ile kullanımını Node.js'te Proxy Kullanımı yazımızda anlattık.

Upstream kullanıldığında safeLookup artık çalışmaz, çünkü adları proxy kendi ağında çözer; bu yüzden izin listesini sıkı tutun. Parolayı tamamen kaldırmak da mümkündür: sunucunuzun genel IP adresini paneldeki IP whitelist'e ekleyin (en fazla 10 adres). İki yöntemi Proxy Kimlik Doğrulama: User:Pass ve IP Whitelist yazımızda karşılaştırdık.

Datacenter Proxy, ekibe trafiği ölçülmeyen sabit bir çıkış IP'si verir. IP başına satılan paketler varsayılan olarak belirli hedef sitelere erişimle gelir, bütün sitelere erişim ise ücretli bir eklentidir; izin listenizdeki sitelerin kapsandığını kontrol edin.

Bir sayfayı başka bir ülkedeki ev kullanıcısının gördüğü gibi görmek istiyorsanız, örneğin bir yerelleştirme kontrolünde, ülke ve şehir seçilerek alınan bir Residential Proxy çıkışı kullanın. 1 ile 60 dakika arasında ayarlanan sticky oturum, bir akış boyunca aynı çıkışı korur.

Node Unblocker'ın sınırları nelerdir?

Node Unblocker, içeriğinin çoğu sunucuda oluşturulan sıradan sayfalarda en iyi sonucu verir. Geri kalanını README açıkça yazar:

  • OAuth ile giriş ve postMessage. Başka bir sağlayıcının penceresinden yapılan girişlerin çalışması pek olası değildir.
  • Büyük tek sayfa uygulamaları. README, çalışmayan birkaç tanınmış sohbet, video ve sosyal medya platformunu adıyla sayar. Sayfaya eklenen betik yaygın istek API'lerini sarar; ama window.location, document.cookie ve postMessage hâlâ yapılacaklar listesindedir.
  • Web sayfası olmayan her şey. Masaüstü uygulamaları, e-posta istemcileri ve komut satırı araçları için forward proxy gerekir.
  • Yavaş bakım. Haziran 2024 sürümü, Ekim 2026'da hâlâ en güncel sürümdü. lib/ klasöründeki middleware dosyaları kısadır; pakete güvenmeden önce onları okuyun.

Kullanım alanları

  • Bir QA ya da yerelleştirme ekibi için, şirketin kendi sayfalarını hedef ülkedeki residential bir çıkıştan açan iç önizleme aracı.
  • Proxy ayarı değiştirilemeyen ama onaylı birkaç siteye kimlik doğrulamalı bir upstream üzerinden ulaşması gereken, yalnızca tarayıcı çalıştıran bir kiosk.
  • İş ortağının izin listesine aldığı tek bir sabit IP'den iş ortağı portalına erişmesi gereken küçük bir ekip.
  • Sayfa yeniden yazan proxy'lerin nasıl çalıştığını öğrenmek: paketi DEBUG=unblocker:* ile çalıştırıp her middleware'i izlemek.

Hepsinde aynı çerçeve geçerlidir: yalnızca kullanma izniniz olan siteler, sitenin kaldırabileceği bir hızda ve hiçbir zaman bir filtreyi ya da engeli aşmanın yolu olarak değil.

Sık yapılan hatalar

  • Girişsiz olarak 0.0.0.0 adresini dinlemek. Sunucu herkese açık bir aktarıcıya dönüşür.
  • Erişimi yalnızca Express middleware'inde kontrol etmek. WebSocket upgrade istekleri oraya hiç uğramaz.
  • requestMiddleware içinde data.clientResponse değerini kontrol etmeden kullanmak. Upgrade isteklerinde null olur ve süreci çökertir.
  • Yalnızca sunucu adı kontrolüne güvenmek. Çözülen IP'yi ajanın lookup fonksiyonunda kontrol edin.
  • Tarayıcı başlıklarının hepsini iletmek. Silmediğiniz sürece Authorization ve X-Forwarded-For hedefe ulaşır.
  • Express'in varsayılan hata sayfasını bırakmak. Üretim (production) modu dışında bu sayfa, ziyaretçimize getaddrinfo ENOTFOUND hatasını yığın iziyle (stack trace) gösterdi.
  • Kişisel hesaplara proxy üzerinden giriş yapmak. Sunucu her parolayı görür.

Karar rehberi

İhtiyaçÖneri
Nasıl çalıştığını öğrenmek127.0.0.1 üzerinde en sade sunucu
Küçük bir ekip belirli siteleri açacakHTTPS veren bir reverse proxy arkasında korumalı sunucu
Sayfaları başka bir ülkedeki ziyaretçinin gözüyle görmekResidential upstream ile korumalı sunucu
İş ortağının izin listesine alacağı sabit bir çıkış IP'siKorumalı sunucu, gerekirse datacenter upstream
Uygulamalar, betikler ya da bütün bir tarayıcıForward proxy (HTTP veya SOCKS5)
OAuth girişleri ya da büyük web uygulamalarıForward proxy ile sıradan bir tarayıcı
Herkese açık bir proxyKurmayın

Sıkça sorulan sorular

Node Unblocker bir VPN midir?

Hayır. VPN bir cihazın bütün trafiğini şifreli bir tünelden geçirir; Node Unblocker ise başka sayfaları sizin yerinize yükleyen bir web sitesidir. Yalnızca /proxy/ adresi altında açtığınız sayfalar ondan geçer ve sunucu bu trafiği açık metin olarak okur.

Node Unblocker IP adresimi gizler mi?

Sunucu başka bir yerde çalışıyorsa hedef siteden gizler: site sunucunun IP'sini görür. Sunucuyu çalıştıran kişiden gizlemez; reverse proxy arkasında ise X-Forwarded-For başlığı silinmedikçe IP'niz bu başlıkla siteye ulaşır.

Node Unblocker Express 5 ile çalışır mı?

Testimizde çalıştı. Express 5.3.0 ile sayfalar, yönlendirmeler, form gönderimleri ve WebSocket, Express 4.22.3'teki gibi davrandı; npm paketin içine ayrı bir Express 4 kopyası kurar.

Node Unblocker WebSocket bağlantılarını taşıyabilir mi?

Evet, unblocker.onUpgrade sunucunun upgrade olayına bağlandığında taşır. Express middleware'leri orada çalışmadığı için girişi ve hedefi bu dinleyicide de kontrol edin.

Node Unblocker ticari bir üründe kullanılabilir mi?

AGPL-3.0 koşullarıyla kullanılabilir: paketi değiştirip değiştirilmiş sürümü kullanıcılara ağ üzerinden sunarsanız, onlara bu sürümün kaynak kodunu da sunmanız gerekir. README, yazarın ticari lisans da sunduğunu belirtir.

Giriş yapılıyor ama sonraki sayfada oturum neden düşüyor?

Çoğu zaman site alt alan adları arasında ya da HTTP'den HTTPS'e geçmiştir. Unblocker çerezleri her site için ayrı bir yol altında tutar ve yeni yola fazladan bir yönlendirmeyle kopyalar; kaynak kodundaki not, bu sırada son kullanma tarihi gibi bayrakların kaybolduğunu söyler.

Özet

Node Unblocker, bir Express sunucusunu sıradan bir tarayıcı için sayfaları yeniden yazan bir web proxy'ye çevirir: ziyaretçi /proxy/<adres> yolunu açar, sunucu sayfayı kendi IP'sinden getirir, linkleri, çerezleri ve yönlendirmeleri yeniden yazar ve geri akıtır. En sade sunucu Express 4 veya 5 üzerinde birkaç satırdır; asıl iş onu güvenli hâle getirmektir: giriş kontrolü, izin listesi, çözülen IP kontrolü, temizlenen başlıklar, korunan bir WebSocket dinleyicisi ve önünde HTTPS. Çıkışın başka bir yerde olması gerektiğinde ajan seçenekleri trafiği bir upstream'den geçirir; bunun için datacenter, residential, mobil ve statik ISP çıkışlarını proxy paketlerimizde bulabilirsiniz.

ChatGPT'ye sorClaude'a sor