Reverse Proxy و افزایش امنیت و سرعت وب سرور — با کانفیگ Nginx

Reverse Proxy سروری است که جلوی وب‌سرورها قرار می‌گیرد: کاربر به آن وصل می‌شود و Reverse Proxy درخواست را به سرور واقعی می‌رساند و پاسخ را برمی‌گرداند. همین جایگاه ساده، ابزار قدرتمندی برای سرعت و امنیت می‌سازد: TLS را خاتمه می‌دهد، محتوا را کش می‌کند، بار را بین چند سرور پخش می‌کند و سرورهای اصلی را از اینترنت پنهان می‌کند. برخلاف تصور رایج، امنیت بیشتر لزوماً سرعت کمتر نیست؛ Reverse Proxy درست پیکربندی‌شده هر دو را بهتر می‌کند.

در این مطلب تفاوت Forward و Reverse Proxy ، کاربردهای Reverse Proxy ، کانفیگ نمونه با Nginx ، هدرهای امنیتی و نکته‌های پیاده‌سازی را مرور می‌کنیم.

Reverse Proxy
جایگاه Reverse Proxy جلوی وب‌سرورها

Reverse Proxy در یک نگاه

جایگاه بین کاربران اینترنت و وب‌سرورهای داخلی
کاربردها TLS Termination ، کش، Load Balancing ، WAF ، پنهان‌سازی سرورها
نرم‌افزارهای رایج Nginx ، HAProxy ، Apache (mod_proxy) ، Envoy
در مقیاس جهانی CDN = Reverse Proxy توزیع‌شده

Forward Proxy و Reverse Proxy

ویژگی Forward Proxy Reverse Proxy
طرف چه کسی است کاربران داخلی سازمان سرورهای سازمان
هدف کنترل و فیلتر دسترسی کاربران به اینترنت محافظت و تسریع سرویس‌های سازمان
چه کسی آن را می‌شناسد کلاینت (تنظیم در مرورگر یا شفاف) کلاینت نمی‌داند؛ فکر می‌کند با سرور اصلی صحبت می‌کند

کاربردها

کانفیگ Reverse Proxy
نمونه معماری Reverse Proxy
  • TLS Termination : گواهی و رمزنگاری در یک نقطه مدیریت می‌شود و بار آن از روی سرورهای اپلیکیشن برداشته می‌شود.
  • کش: فایل‌های ثابت از حافظه Reverse Proxy تحویل می‌شوند؛ سرور اپلیکیشن فقط درخواست‌های پویا را می‌بیند.
  • Load Balancing : تقسیم درخواست‌ها بین چند سرور و حذف خودکار سرور خراب با Health Check.
  • امنیت: سرورهای اصلی IP عمومی ندارند؛ محدودیت نرخ (Rate Limiting) ، WAF و فیلتر مسیرهای حساس در یک نقطه اعمال می‌شود.
  • فشرده‌سازی و HTTP/2 : بهینه‌سازی ارسال به کاربر بدون تغییر در اپلیکیشن.

کانفیگ نمونه با Nginx

upstream app_servers {
    server 10.10.20.11:8080;
    server 10.10.20.12:8080;
}

proxy_cache_path /var/cache/nginx keys_zone=static:50m max_size=2g inactive=7d;
limit_req_zone $binary_remote_addr zone=perip:10m rate=20r/s;

server {
    listen 443 ssl http2;
    server_name www.example.com;
    ssl_certificate     /etc/ssl/example/fullchain.pem;
    ssl_certificate_key /etc/ssl/example/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    add_header Strict-Transport-Security "max-age=31536000" always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-Frame-Options SAMEORIGIN always;

    location ~* .(css|js|png|jpg|webp|svg|woff2)$ {
        proxy_cache static;
        proxy_cache_valid 200 7d;
        proxy_pass http://app_servers;
    }

    location / {
        limit_req zone=perip burst=40 nodelay;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://app_servers;
    }
}

هدر X-Forwarded-For آدرس واقعی کاربر را به سرور اپلیکیشن می‌رساند؛ اپلیکیشن باید فقط به این هدر از سمت Reverse Proxy اعتماد کند. محدودیت نرخ (limit_req) جلوی حجم زیاد درخواست از یک آدرس را می‌گیرد.

جایگاه در شبکه

Reverse Proxy معمولاً در DMZ قرار می‌گیرد: از اینترنت فقط پورت‌های 80 و 443 به آن باز است و از آن فقط به پورت‌های لازم سرورهای داخلی. روی فایروال یا روتر لبه، سرورهای اپلیکیشن هیچ Static NAT یا Port Forwarding مستقیم نداشته باشند (NAT روی روتر سیسکو).

پرسش‌های متداول

Reverse Proxy جای فایروال را می‌گیرد؟
خیر؛ مکمل آن است. فایروال شبکه را کنترل می‌کند و Reverse Proxy لایه HTTP را.

اگر خود Reverse Proxy از کار بیفتد؟
برای سرویس حساس، دو Reverse Proxy با IP مجازی مشترک (مثلاً با Keepalived و VRRP) راه‌اندازی کنید.

منابع

مطالب مرتبط: CDN یا شبکه توزیع محتوا و DDoS و مقابله با آن.

مشاوره با AKA NET

برای طراحی زیرساخت امن و پرسرعت وب، مقابله با DDoS و امن‌سازی لبه شبکه با آکانت (AKA NET) تماس بگیرید.

تلفن: 09121308444  |  ایمیل: aka@aka.ir  |  aka.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *