Cloudflare & Network Engineering

How to Build a Free Reverse Proxy using Cloudflare Workers

ডেভেলপমেন্টের কাজ করার সময় আমরা প্রায়শই বিভিন্ন থার্ড-পার্টি এপিআই (API) রিকোয়েস্ট ব্লক হওয়া, ফ্রন্টএন্ডে বিরক্তিকর CORS (Cross-Origin Resource Sharing) এরর আসা অথবা সিকিউরিটির কারণে মেইন সার্ভারের অরিজিনাল আইপি অ্যাড্রেস (Origin IP) হাইড করার মতো চ্যালেঞ্জের মুখোমুখি হই।

এই সমস্ত সমস্যার একটি দুর্দান্ত এবং ফ্রিল্যান্স-ফ্রেন্ডলি সমাধান হলো Reverse Proxy ব্যবহার করা। আর এর জন্য আলাদা কোনো পেইড গেটওয়ে বা এনগিনক্স (Nginx) সার্ভার কনফিগার করার দরকার নেই। গুগলের মতো ফাস্ট এবং ক্লাউডফ্লেয়ারের গ্লোবাল এজ নেটওয়ার্কের সুবিধা নিয়ে আমরা সম্পূর্ণ ফ্রিতে **Cloudflare Workers** দিয়ে একটি আল্ট্রা-ফাস্ট রিভার্স প্রক্সি তৈরি করতে পারি। আজ আমরা এর প্র্যাক্টিক্যাল কোড এবং গাইড দেখবো।

১. মেকানিজম: রিভার্স প্রক্সি কীভাবে সাহায্য করে?

যখন কোনো ইউজার সরাসরি আপনার মেইন এপিআই সার্ভারে রিকোয়েস্ট পাঠায়, তখন আপনার সার্ভারের রিয়েল আইপি এক্সপোজড হয়ে যাওয়ার ঝুঁকি থাকে। কিন্তু ক্লাউডফ্লেয়ার ওয়ার্কার্স প্রক্সি মাঝখানে একটি ফিল্টার বা দেয়াল হিসেবে কাজ করে। ইউজার রিকোয়েস্ট পাঠাবে ওয়ার্কার্সের সাবডোমেনে, ওয়ার্কার্স সেই রিকোয়েস্টটিকে ব্যাকএন্ডে রি-রাইট (Rewrite) করে আপনার মেইন সার্ভার থেকে ডেটা এনে ইউজারকে ফেরত দেবে। এতে আপনার অরিজিনাল ব্যাকএন্ড ১০০% সুরক্ষিত থাকে।

ধাপ ২: ক্লাউডফ্লেয়ার ড্যাশবোর্ডে ওয়ার্কার তৈরি করা

সার্ভারলেস স্ক্রিপ্টটি লাইভ করার জন্য নিচে দেওয়া সিম্পল স্টেপগুলো ফলো করুন:

  1. আপনার Cloudflare Dashboard-এ লগইন করুন।
  2. বাম পাশের সাইডবার থেকে Workers & Pages অপশনে ক্লিক করুন।
  3. Create Application বাটনে চেপে Create Worker সিলেক্ট করুন।
  4. আপনার ওয়ার্কারের একটি নাম দিন (যেমন: apiproxy-worker) এবং Deploy-এ ক্লিক করুন।
  5. ডেপ্লয়মেন্ট সম্পন্ন হলে Edit Code বাটনে ক্লিক করে কোড এডিটর প্যানেলটি ওপেন করুন।

ধাপ ৩: কাস্টম প্রক্সি জাভাস্ক্রিপ্ট কোড রাইটিং

এডিটরে থাকা ডিফল্ট কোডগুলো মুছে দিন এবং নিচের আধুনিক ইএস-মডিউল (ES Modules) ভিত্তিক প্রক্সি কোডটি পেস্ট করুন। এই কোডটি রিকোয়েস্ট ফরওয়ার্ড করার পাশাপাশি CORS পলিসিকেও অটো-হ্যান্ডেল করবে:

export default {
  async fetch(request, env, ctx) {
    // ১. আপনার যে মেইন সার্ভার বা এপিআই-কে লুকাতে চান তার URL এখানে দিন
    const TARGET_ORIGIN = "https://your-secret-api-server.com";

    const url = new URL(request.url);
    
    // ওয়ার্কার্সের সাবডোমেন পাথের পর যা থাকবে তা মেইন সার্ভারের পাথে কনভার্ট হবে
    const targetUrl = TARGET_ORIGIN + url.pathname + url.search;

    // ২. নতুন রিকোয়েস্ট অবজেক্ট তৈরি এবং হেডার ক্লোন করা
    const modifiedHeaders = new Headers(request.headers);
    
    // সিকিউরিটির জন্য হোস্ট হেডার পরিবর্তন করা অত্যন্ত জরুরি
    modifiedHeaders.set("Host", new URL(TARGET_ORIGIN).host);
    
    // প্রক্সি ট্রাফিক আইডেন্টিফিকেশনের জন্য কাস্টম হেডার (ঐচ্ছিক)
    modifiedHeaders.set("X-Proxied-By", "Ahyan-Creations-Worker");

    // ৩. মেইন সার্ভারে রিকোয়েস্ট পাঠানো
    try {
      const response = await fetch(targetUrl, {
        method: request.method,
        headers: modifiedHeaders,
        body: request.method !== "GET" && request.method !== "HEAD" ? request.body : null,
        redirect: "follow"
      });

      // ৪. CORS এরর চিরতরে ফিক্স করতে রেসপন্স হেডার মডিফাই করা
      const newResponseHeaders = new Headers(response.headers);
      newResponseHeaders.set("Access-Control-Allow-Origin", "*");
      newResponseHeaders.set("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, OPTIONS");
      newResponseHeaders.set("Access-Control-Allow-Headers", request.headers.get("Access-Control-Request-Headers") || "*");

      // ব্রাউজারের প্রি-ফ্লাইট (OPTIONS) রিকোয়েস্ট হ্যান্ডেল করা
      if (request.method === "OPTIONS") {
        return new Response(null, {
          status: 204,
          headers: newResponseHeaders
        });
      }

      return new Response(response.body, {
        status: response.status,
        statusText: response.statusText,
        headers: newResponseHeaders
      });

    } catch (error) {
      return new Response(JSON.stringify({ error: "Proxy Failed", details: error.message }), {
        status: 502,
        headers: { "Content-Type": "application/json" }
      });
    }
  }
};

ধাপ ৪: সেভ এবং লাইভ টেস্টিং

কোড পেস্ট করা শেষ হলে এডিটরের ডান পাশের ওপরের কোণা থেকে Save and Deploy বাটনে ক্লিক করুন। ক্লাউডফ্লেয়ার আপনাকে একটি ফ্রি সাবডোমেন ইউআরএল দেবে (যেমন: apiproxy-worker.yourname.workers.dev)।

এখন ফ্রন্টএন্ড বা টারমাক্স স্ক্রিপ্ট থেকে সরাসরি আপনার সিক্রেট সার্ভারে হিট না করে এই ওয়ার্কার্স ইউআরএল-এর শেষে পাথ (যেমন: /v1/users) যোগ করে রিকোয়েস্ট পাঠান। আপনার প্রক্সি বিন্দুমাত্র ল্যাটেন্সি বা স্পিড লস ছাড়াই ব্যাকএন্ড ডেটা সিকিউরলি ফেচ করে নিয়ে আসবে!

ফ্রি প্ল্যান কোটা এবং কাস্টম ডোমেন: ক্লাউডফ্লেয়ার তাদের ফ্রি প্ল্যানে প্রতিদিন ১ লক্ষ (100,000) রিকোয়েস্ট সম্পূর্ণ ফ্রিতে প্রসেস করার সুযোগ দেয়, যা যেকোনো স্টার্টআপ বা ক্লায়েন্ট প্রজেক্টের জন্য অনেক বেশি। তাছাড়া আপনি চাইলে এই ওয়ার্কারের সাথে আপনার নিজস্ব কাস্টম ডোমেন (যেমন: proxy.ahyancreations.top) যুক্ত করে ব্র্যান্ডিং আরও প্রফেশনাল লেভেলে নিয়ে যেতে পারেন।