Nginx بهعنوان Web Server در مقابل Nginx بهعنوان Reverse Proxy
در حالت Web Server، Nginx مستقیماً فایلهای استاتیک (HTML، CSS، عکس) را از دیسک میخواند و پاسخ میدهد، در حالی که در حالت Reverse Proxy، Nginx درخواست را دریافت کرده و به یک سرور برنامه در پشت خودش (مثل Node.js یا Kestrel روی پورت دیگر) forward میکند و پاسخ را برمیگرداند.
| ویژگی | Nginx بهعنوان Web Server | Nginx بهعنوان Reverse Proxy |
|---|---|---|
| منبع پاسخ | فایل روی دیسک | سرور backend دیگر |
| دایرکتیو کلیدی | root، index | proxy_pass |
| مناسب برای | سایت استاتیک/SPA | API و برنامههای پویا |
کِی از 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 استفاده کنید؛ در عمل اغلب هر دو حالت با هم در یک فایل پیکربندی ترکیب میشوند.
