Back to Blog

بناء خادم بروكسي بسيط باستخدام Node.js

أفضل طريقة لفهم أي تقنية هي بناؤها بنفسك. في هذا الدليل، سنبتعد عن الحلول الجاهزة مثل Squid وسنقوم بكتابة كود لبروكسي بسيط باستخدام JavaScript. هذا المشروع سيساعدك على فهم كيفية معالجة طلبات HTTP وكيفية تمرير البيانات بين العميل والخادم.

المتطلبات الأساسية

ستحتاج فقط إلى تثبيت Node.js على جهازك. سنستخدم مكتبة http المدمجة، ولن نحتاج لأي مكتبات خارجية (Dependencies) معقدة، مما يجعل البروكسي خفيفاً وسريعاً.

خطوات بناء البروكسي

فكرة البروكسي بسيطة: استلام الطلب من المتصفح، إرساله إلى الخادم الهدف، ثم إعادة الرد إلى المتصفح. سنقوم بإنشاء خادم يستمع على المنفذ 8080.

الكود الكامل (proxy.js)


const http = require('http');
const net = require('net');
const url = require('url');

// إنشاء خادم HTTP
const server = http.createServer((clientReq, clientRes) => {
    const reqUrl = url.parse(clientReq.url);
    
    const options = {
        hostname: reqUrl.hostname,
        port: reqUrl.port || 80,
        path: reqUrl.path,
        method: clientReq.method,
        headers: clientReq.headers
    };

    // توجيه الطلب للخادم الهدف
    const proxyReq = http.request(options, (proxyRes) => {
        clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
        proxyRes.pipe(clientRes, { end: true });
    });

    clientReq.pipe(proxyReq, { end: true });

    proxyReq.on('error', (e) => {
        console.log(`Error: ${e.message}`);
        clientRes.end();
    });
});

// دعم HTTPS (CONNECT Method)
server.on('connect', (req, clientSocket, head) => {
    const { port, hostname } = url.parse(`//${req.url}`, false, true);
    
    const serverSocket = net.connect(port || 443, hostname, () => {
        clientSocket.write('HTTP/1.1 200 Connection Established\r\n' +
                        'Proxy-agent: Node.js-Proxy\r\n' +
                        '\r\n');
        serverSocket.write(head);
        serverSocket.pipe(clientSocket);
        clientSocket.pipe(serverSocket);
    });
});

server.listen(8080, () => {
    console.log('Proxy running on port 8080');
});
                    

كيفية الاستخدام

بعد تشغيل الكود بـ node proxy.js، قم بضبط إعدادات المتصفح لاستخدام localhost:8080 كبروكسي. ستلاحظ أن جميع طلباتك تمر عبر هذا السكريبت البسيط. يمكنك الآن إضافة ميزات مثل تسجيل الطلبات (Logging) أو حظر مواقع معينة بسهولة.

Disclosure: we may earn a commission if you purchase through some links.

Services Related To This Article

These offers are related to privacy, password security, and development workflows. Replace the current links with your real affiliate links through environment variables.

Default Links Need Replacement

Proton

Privacy, mail, and VPN

A strong fit for privacy-focused visitors who want VPN and secure email under one brand.

Explore Proton

Surfshark

Consumer VPN

Best on pages about geo-blocking, privacy, and public Wi-Fi protection.

Try Surfshark

NordVPN

High-converting VPN

A clear offer for users who need a paid, more durable alternative to a free proxy.

View NordVPN

1Password

Password management

The best match for password, secrets, team access, and personal security pages.

Discover 1Password

DigitalOcean

Developer cloud hosting

A strong fit for proxy setup, server, and infrastructure content aimed at developers and small teams.

Start with DigitalOcean