How-To Guides

تسلط بر Nginx: راهنمای جامع پیکربندی پروکسی معکوس

در معماری وب مدرن، ارائه محتوای استاتیک و مدیریت درخواست‌های با ترافیک بالا مستقیماً از سرور اپلیکیشن اغلب ناکارآمد و پرریسک است. Nginx (تلفظ: "انجین-اکس") یک سرور HTTP سبک و با عملکرد بالا و پروکسی معکوس است که توانایی مدیریت ده‌ها هزار اتصال همزمان را با مصرف حافظه حداقل دارد. پیکربندی Nginx به عنوان پروکسی معکوس یک مهارت اساسی برای هر مدیر سیستم یا توسعه‌دهنده بک‌اند است که به دنبال افزایش امنیت، بهبود عملکرد و ساده‌سازی پایان‌دهی SSL می‌باشد.

این راهنما شما را در فرآیند راه‌اندازی Nginx به عنوان پروکسی معکوس، شامل پیکربندی پایه، یکپارچه‌سازی SSL و استراتژی‌های متعادل‌سازی بار (Load Balancing) هدایت خواهد کرد.

درک مفهوم پروکسی معکوس

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

  • امنیت: این سرویس به عنوان یک ضربه‌گیر عمل کرده و سرورهای بک‌اند را در برابر قرار گرفتن مستقیم در معرض اینترنت محافظت می‌کند.
  • عملکرد: Nginx می‌تواند دارایی‌های استاتیک، پایان‌دهی SSL و فشرده‌سازی را مدیریت کند که این امر بار روی سرورهای اپلیکیشن شما را کاهش می‌دهد.
  • مقیاس‌پذیری: این امکان را فراهم می‌کند تا بار ترافیک بین چندین نمونه بک‌اند توزیع شود.

پیش‌نیازها

قبل از شروع پیکربندی، اطمینان حاصل کنید که موارد زیر را دارید:

  1. یک سرور که یک توزیع لینوکس (مثال‌های زیر برای اوبونتو یا سنت‌اواس) را اجرا می‌کند.
  2. Nginx نصب و در حال اجرا باشد.
  3. یک اپلیکیشن بک‌اند که روی یک پورت محلی در حال اجراست (مثلاً localhost:3000 برای یک اپلیکیشن Node.js یا localhost:8080 برای یک اپلیکیشن Java Spring Boot).
  4. نام دامنه به آدرس IP سرور شما اشاره کند.

پیکربندی پایه پروکسی معکوس

هسته پیکربندی پروکسی معکوس Nginx در دستور proxy_pass نهفته است. فرض کنید یک اپلیکیشن Node.js روی پورت 3000 در حال اجراست. در اینجا نحوه پیکربندی Nginx برای هدایت تمام درخواست‌های HTTP به این اپلیکیشن آورده شده است.

فایل پیکربندی بلاک سرور Nginx خود را ویرایش کنید که معمولاً در مسیر /etc/nginx/sites-available/your_domain یا /etc/nginx/conf.d/default.conf قرار دارد.

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        # Proxy the request to the Node.js application
        proxy_pass http://localhost:3000;
        
        # Required headers for proper proxying
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        
        # Cache control (optional)
        proxy_cache_bypass $http_upgrade;
    }
}

توضیح دستورات کلیدی:

  • proxy_pass: آدرس URL سرور بک‌اند را مشخص می‌کند.
  • proxy_set_header Host: هدر Host اصلی را به بک‌اند ارسال می‌کند تا اطمینان حاصل شود که میزبان‌های مجازی به درستی کار می‌کنند.
  • proxy_set_header X-Real-IP: آدرس IP واقعی کلاینت را به سرور بک‌اند منتقل می‌کند.
  • proxy_http_version: نسخه پروتکل را به HTTP/1.1 ارتقا می‌دهد که برای ویژگی‌هایی مانند WebSockets ضروری است.

افزودن SSL با Let's Encrypt

در محیط وب امروز، HTTPS الزامی است. با استفاده از certbot، می‌توانید به راحتی گواهی‌های SSL را برای پروکسی معکوس Nginx خود دریافت و پیکربندی کنید.

sudo certbot --nginx -d example.com -d www.example.com

Certbot به طور خودکار پیکربندی Nginx شما را برای گوش دادن به پورت 443 تغییر داده و ترافیک HTTP را به HTTPS هدایت می‌کند. پیکربندی حاصل مشابه بلاک پایه خواهد بود اما با گواهی‌های SSL و هدرهای HSTS فعال.

متعادل‌سازی بار برای چندین بک‌اند

یکی از قوی‌ترین ویژگی‌های Nginx توانایی توزیع ترافیک بین چندین سرور است. برای دستیابی به این هدف، یک بلاک upstream را در فایل پیکربندی اصلی Nginx (/etc/nginx/nginx.conf) تعریف کنید.

upstream my_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

با اشاره proxy_pass به گروه upstream my_app، Nginx از الگوریتم پیش‌فرض round-robin خود برای توزیع مساوی درخواست‌های ورودی بین سه نمونه بک‌اند استفاده خواهد کرد.

نتیجه‌گیری

پیکربندی Nginx به عنوان پروکسی معکوس گامی قدرتمند به سمت ساخت یک زیرساخت وب مقاوم، امن و مقیاس‌پذیر است. با واگذار کردن پایان‌دهی SSL، مدیریت فایل‌های استاتیک و متعادل‌سازی بار بین سرویس‌های بک‌اند، Nginx به منطق اپلیکیشن شما اجازه می‌دهد بر کاری که بهترین عملکرد را دارد تمرکز کند: ارائه منطق کسب‌وکار. به یاد داشته باشید که همیشه پیکربندی خود را با nginx -t قبل از بارگذاری مجدد سرویس آزمایش کنید تا از عدم وجود زمان توقف (Downtime) اطمینان حاصل کنید. تسلط بر این الگوها قابلیت‌های DevOps و توسعه بک‌اند شما را به طور قابل توجهی ارتقا خواهد داد.

Share: