العودة للمدونة

بناء خادم بروكسي بسيط باستخدام 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) أو حظر مواقع معينة بسهولة.

إفصاح: قد نحصل على عمولة إذا اشتريت عبر بعض الروابط.

خدمات مرتبطة بالمقال

هذه العروض مرتبطة بموضوع الخصوصية، كلمات المرور، وبيئات التطوير. استبدل الروابط الحالية بروابطك التابعة الفعلية عبر متغيرات البيئة.

روابط افتراضية تحتاج استبدال

Proton

خصوصية وبريد وVPN

حل مناسب لزوار الخصوصية الذين يبحثون عن VPN وخدمات بريد آمنة ضمن علامة واحدة.

اكتشف Proton

Surfshark

VPN للمستخدمين العامين

مناسب للمقالات التي تتحدث عن الحجب الجغرافي، الخصوصية، واستخدام الشبكات العامة.

جرّب Surfshark

NordVPN

VPN شائع وعالي التحويل

عرض واضح للزوار الذين يبحثون عن بديل مدفوع أكثر ثباتاً من البروكسي المجاني.

شاهد NordVPN

1Password

إدارة كلمات المرور

أفضل توافق مع أدوات كلمات المرور، الأسرار، الفرق، وصفحات الأمن الشخصي.

اكتشف 1Password

DigitalOcean

استضافة وسحابة للمطورين

مناسب لمقالات إعداد البروكسي، السيرفرات، والبنية التحتية للمطورين والشركات الصغيرة.

ابدأ مع DigitalOcean