یک لایه واسط جلوی برنامه
Reverse proxy سرویسی است که درخواستهای ورودی از کاربران را میگیرد و به یک یا چند سرور پشتی (backend) هدایت میکند. nginx یکی از رایجترین انتخابها برای این کار است، چون سبک، سریع و بسیار پایدار است. مزیتهای استفاده از nginx بهعنوان reverse proxy شامل مدیریت متمرکز TLS/SSL، توزیع بار بین چند نمونه از برنامه، سرو کردن فایلهای استاتیک بدون درگیر کردن برنامه اصلی، و افزودن هدرهای امنیتی است.
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /opt/myapp/static/;
expires 30d;
}
}
هدرهای X-Real-IP و X-Forwarded-For بسیار مهماند، چون بدون آنها برنامه پشتی
تصور میکند همه درخواستها از خود nginx (یعنی 127.0.0.1) میآیند و آدرس واقعی کاربر را از دست میدهد. برای
توزیع بار بین چند نمونه از یک برنامه، از بلوک upstream استفاده میشود:
upstream app_backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
پس از هر تغییر در پیکربندی nginx، باید سینتکس را تست و سپس reload کرد، بدون قطع اتصالات فعال:
sudo nginx -t
sudo systemctl reload nginx
یک نکته مهم درباره TLS/SSL: در عمل، بهتر است گواهینامه امنیتی و رمزنگاری HTTPS روی همین لایه nginx متمرکز شود، نه روی هر یک از سرورهای پشتی جداگانه؛ این الگو با نام SSL Termination شناخته میشود. به این ترتیب فقط یک نقطه برای مدیریت و تمدید گواهی وجود دارد و ارتباط بین nginx و سرورهای پشتی که معمولاً در همان شبکه داخلی و امن قرار دارند، میتواند بهصورت HTTP ساده (بدون رمزنگاری اضافه) برقرار شود، بدون اینکه امنیت کلی سیستم کاهش یابد.