পাঠ্যক্রম খুলুন
প্রাথমিক পর্যায়

Forward ও Reverse Proxy: ভূমিকা ও trust boundary

Forward and Reverse Proxies

এই পাঠের কুইজ ↓৬ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Forward ও reverse proxy-এর অবস্থান
  • Buffering, TLS ও trusted headers
  • Laravel outbound request boundary

সমস্যা দিয়ে শুরু

Corporate network-এ API request একটি proxy দিয়ে বের হয়; public website-এ আবার NGINX request নিয়ে Laravel-এ দেয়। দুটি ক্ষেত্রেই proxy, কিন্তু কার পক্ষ থেকে কাজ করছে তা আলাদা। এই boundary না বুঝলে source IP, certificate এবং access policy ভুল জায়গায় বসে।

সহজ করে বুঝি

Forward proxy client-এর পক্ষ থেকে destination-এ যায়। এটি outbound control, audit বা egress filtering করতে পারে। Reverse proxy server-এর সামনে client request গ্রহণ করে upstream application-এ দেয়; TLS termination, compression, caching ও routing করতে পারে। Reverse proxy load balancer-ও হতে পারে, কিন্তু প্রতিটি proxy multiple backend balance করে না। HTTP CONNECT tunnel-এ forward proxy encrypted traffic forward করতে পারে; payload inspect করা হচ্ছে কি না deployment policy-এর বিষয়।

পরিচিত একটি উপমা

অফিসের courier desk employee-এর হয়ে বাইরে parcel পাঠায়—forward proxy। দোকানের reception customer-এর request নিয়ে ভেতরের department-এ দেয়—reverse proxy। দুজনের register আলাদা; receiver-এর কাছে যে পরিচয় পাঠানো হচ্ছে তা যাচাই করাও আলাদা দায়িত্ব।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Client forward proxy নির্বাচন করে।
Diagram-এর text flow দেখুন
flowchart LR
 C[Office Client] --> F[Forward Proxy]
 F --> R[Website Reverse Proxy]
 R --> A[Laravel App]
 A --> D[(Database)]

Client forward proxy নির্বাচন করে। Website-এর public address reverse proxy-তে পৌঁছায়; application তার পেছনে private থাকে। Backend transport source reverse proxy হওয়ায় original client identity trusted headers দিয়ে যেতে পারে। দুই proxy-এর buffering ও timeout যোগ হয়ে end-to-end behavior বদলায়। কোন layer error দিল সেটি request ID দিয়ে trace করুন।

PHP ও Laravel-এ প্রয়োগ

নিচের service fragment Laravel HTTP Client-এর outbound proxy option দেখায়। services.egress.proxy config-এ controlled proxy URL দিন; user input দিয়ে proxy বা destination বাছবেন না। Local demo endpoint-এর জন্য প্রযোজ্য route/reachability দরকার। Secret proxy credentials logs-এ লিখবেন না।

php
use Illuminate\Support\Facades\Http;

$proxy = config('services.egress.proxy');
abort_unless(is_string($proxy) && $proxy !== '', 503);

$response = Http::withOptions(['proxy' => $proxy])
    ->connectTimeout(2)
    ->timeout(5)
    ->get('https://catalog.example.test/health');

$response->throw();

সুবিধা, সীমাবদ্ধতা ও trade-off

Central proxy policy consistency দেয়, কিন্তু latency, bottleneck ও availability dependency যোগ করে। Response buffering slow client থেকে app worker-কে কিছুটা মুক্ত রাখতে পারে, কিন্তু streaming-এ delay বাড়ায়। Caching proxy response reuse করে; private user content ভুল cache key-তে গেলে data leak হয়। Reverse proxy-এর request size limit বড় upload reject করতে পারে, যদিও Laravel validation আরও বড় size অনুমতি দেয়।

সাধারণ ভুল

  • Forwarded headers সব source থেকে গ্রহণ করা।
  • Proxy timeout বাড়িয়ে slow database query ঢেকে রাখা।
  • Shared cache-এ authenticated response public করে দেওয়া।

আরও একটু গভীরে

প্রতিটি proxy-তে HTTP parser থাকে। Request framing disagreement security issue তৈরি করতে পারে; contradictory content-length ও transfer-encoding handling নির্ভরযোগ্য server-এ ছেড়ে দিন এবং proxy/runtime patch রাখুন। TLS terminate করলে private upstream-এর encryption requirement আলাদা লিখুন। Proxy certificate trust বদলাতে TLS verification বন্ধ করা solution নয়। User-provided URL fetch-এ SSRF প্রতিরোধ application ও egress policy উভয় স্তরে লাগতে পারে।

মনে রাখুন

Proxy কোন পক্ষের হয়ে কাজ করছে আগে চিহ্নিত করুন। Routing, trust, caching ও timeouts boundary অনুযায়ী নকশা করুন। Controlled infrastructure metadata কেবল সেখান থেকেই trust করুন।

নিজে চেষ্টা করুন

একটি request path-এ browser, corporate proxy, CDN, reverse proxy ও Laravel আঁকুন। প্রতিটি hop-এ TLS termination, source IP এবং timeout লিখুন। কোন error browser-এ 502 বা 504 হবে তা staging-এর fault injection দিয়ে পরীক্ষা করুন।

নিজের বোঝা যাচাই করুন

1. Reverse proxy আর load balancer একই?

অনেক reverse proxy load balance করতে পারে, তবে single upstream proxy-ও সম্ভব। প্রথমটি অবস্থান ও ভূমিকা, দ্বিতীয়টি distribution behavior।

2. Forward proxy কে নির্বাচন করে?

সাধারণত client বা তার network configuration। Website developer সব external user-এর forward proxy নিয়ন্ত্রণ করেন না।

3. Proxy থাকলে TLS verification বন্ধ করব?

না। Trusted certificate chain ও explicit enterprise CA configuration ব্যবহার করুন। Verification বন্ধ করলে endpoint identity protection হারায়।

4. Streaming আটকে যায় কেন?

Proxy buffering, compression বা idle timeout response delivery বদলাতে পারে। Application flush করলেই প্রতিটি intermediary সঙ্গে সঙ্গে forward করবে না।

5. কোন IP rate limit-এ নেব?

Verified client identity বা trusted proxy থেকে resolved address। Untrusted X-Forwarded-For পড়লে caller সহজেই limit bypass করতে পারে।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।