CodeShot

Nginx به‌عنوان Web Server در مقابل Nginx به‌عنوان Reverse Proxy

در حالت Web Server، Nginx مستقیماً فایل‌های استاتیک (HTML، CSS، عکس) را از دیسک می‌خواند و پاسخ می‌دهد، در حالی که در حالت Reverse Proxy، Nginx درخواست را دریافت کرده و به یک سرور برنامه در پشت خودش (مثل Node.js یا Kestrel روی پورت دیگر) forward می‌کند و پاسخ را برمی‌گرداند.

ویژگیNginx به‌عنوان Web ServerNginx به‌عنوان Reverse Proxy
منبع پاسخفایل روی دیسکسرور backend دیگر
دایرکتیو کلیدیroot، indexproxy_pass
مناسب برایسایت استاتیک/SPAAPI و برنامه‌های پویا

کِی از Nginx به‌عنوان Web Server استفاده کنیم؟

وقتی فقط باید فایل‌های استاتیک یک سایت (مثل یک SPA بیلد شده) را سرو کنید بدون هیچ برنامه backend پویا.

کِی از Nginx به‌عنوان Reverse Proxy استفاده کنیم؟

وقتی پشت Nginx یک برنامه backend پویا (API، اپلیکیشن Node/دات‌نت) دارید و می‌خواهید SSL Termination، Load Balancing یا کش را جلوی آن قرار دهید.

مثال Nginx به‌عنوان Web Server

server {
    listen 80;
    root /var/www/html;
    index index.html;
}

مثال Nginx به‌عنوان Reverse Proxy

server {
    listen 80;
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
    }
}

اشتباه رایج

اشتباه رایج فراموش کردن proxy_set_header در حالت Reverse Proxy است؛ بدون آن، برنامه backend آدرس IP واقعی کاربر و هدرهای اصلی را نمی‌بیند و همه درخواست‌ها انگار از خود Nginx می‌آیند.

جمع‌بندی

برای فایل‌های استاتیک صرف از حالت Web Server و برای قرار دادن Nginx جلوی یک برنامه backend پویا از حالت Reverse Proxy استفاده کنید؛ در عمل اغلب هر دو حالت با هم در یک فایل پیکربندی ترکیب می‌شوند.