نصب Nginx روی لینوکس یکی از پرکاربردترین کارهایی است که پس از راه‌اندازی یک سرور مجازی انجام می‌دهید. Nginx یک وب‌سرور سبک، سریع و فوق‌العاده مقیاس‌پذیر است که امروزه پشت بخش بزرگی از پرترافیک‌ترین سایت‌های جهان قرار دارد. این وب‌سرور علاوه بر ارائه محتوای وب، می‌تواند نقش پراکسی معکوس (Reverse Proxy)، متعادل‌کننده بار (Load Balancer) و کش‌کننده محتوا را نیز ایفا کند. در این راهنمای جامع از رپیدو سرور، مرحله‌به‌مرحله یاد می‌گیرید که Nginx را نصب، پیکربندی و ایمن‌سازی کنید و برای اجرای وب‌سایت خود آماده نمایید.

Nginx چیست و چه تفاوتی با Apache دارد؟

Nginx (که «انجین‌اکس» تلفظ می‌شود) در سال ۲۰۰۴ با هدف حل مشکل معروف C10k یعنی مدیریت هم‌زمان ده هزار اتصال، توسعه یافت. برخلاف وب‌سرور Apache که به‌طور سنتی برای هر اتصال یک پردازه یا نخ جداگانه ایجاد می‌کند، Nginx از معماری رویداد-محور (event-driven) و ناهم‌زمان (asynchronous) استفاده می‌کند. این معماری باعث می‌شود Nginx با مصرف بسیار کم حافظه، تعداد زیادی اتصال هم‌زمان را مدیریت کند.

به همین دلیل، Nginx به‌ویژه برای سرو کردن محتوای ایستا (static content) مانند تصاویر، فایل‌های CSS و جاوااسکریپت و همچنین به‌عنوان پراکسی معکوس جلوی اپلیکیشن‌های داینامیک بسیار محبوب است. در بسیاری از معماری‌های مدرن، Nginx در خط مقدم قرار می‌گیرد و درخواست‌ها را به سرویس‌های پشتی مانند Node.js، Django یا PHP-FPM هدایت می‌کند.

نکته: پیش از شروع، مطمئن شوید یک سرور لینوکسی در اختیار دارید. اگر هنوز سرور تهیه نکرده‌اید، می‌توانید از طریق صفحه خرید سرور مجازی یک VPS مناسب سفارش دهید.

نصب Nginx روی لینوکس (اوبونتو، دبیان و سنت‌اواس)

فرآیند نصب Nginx روی لینوکس بسته به توزیع کمی متفاوت است، اما در همه موارد ساده و سریع انجام می‌شود. پیش از هر چیز، لیست بسته‌های سیستم را به‌روزرسانی کنید تا آخرین نسخه‌ها نصب شوند.

برای توزیع‌های مبتنی بر دبیان مانند Ubuntu و Debian از مدیر بسته apt استفاده می‌کنیم:

apt update
apt install nginx -y

برای توزیع‌های مبتنی بر ردهت مانند CentOS، AlmaLinux و Rocky Linux از dnf یا yum استفاده کنید:

dnf install epel-release -y
dnf install nginx -y

پس از پایان نصب، سرویس Nginx را فعال و اجرا کنید تا هم اکنون و هم پس از ری‌استارت‌های بعدی سرور به‌صورت خودکار بالا بیاید:

systemctl start nginx
systemctl enable nginx

برای اطمینان از اینکه سرویس به‌درستی در حال اجراست، وضعیت آن را بررسی کنید:

systemctl status nginx

اگر خروجی شامل عبارت active (running) بود، Nginx با موفقیت نصب و اجرا شده است. حالا کافی است آدرس IP سرور را در مرورگر وارد کنید تا صفحه پیش‌فرض خوش‌آمدگویی Nginx را ببینید.

آشنایی با ساختار فایل‌های پیکربندی Nginx

یکی از نکات مهم در نصب Nginx روی لینوکس، درک ساختار پوشه‌ها و فایل‌های پیکربندی است. فایل اصلی پیکربندی در مسیر /etc/nginx/nginx.conf قرار دارد، اما بهترین روش این است که تنظیمات هر سایت را در فایل‌های جداگانه بنویسید. ساختار متداول در اوبونتو و دبیان به این شکل است:

  • /etc/nginx/nginx.conf — فایل پیکربندی اصلی و سراسری.
  • /etc/nginx/sites-available/ — محل نگهداری تنظیمات همه سایت‌ها.
  • /etc/nginx/sites-enabled/ — لینک‌های نمادین به سایت‌های فعال.
  • /var/www/html/ — مسیر پیش‌فرض فایل‌های وب.
  • /var/log/nginx/ — محل ذخیره لاگ‌های access و error.

در توزیع‌های ردهت به‌جای دو پوشه sites-available و sites-enabled، معمولاً از پوشه /etc/nginx/conf.d/ استفاده می‌شود که هر فایل با پسوند .conf در آن به‌طور خودکار بارگذاری می‌گردد. هر واحد پیکربندی سایت را یک بلوک server می‌نامند که مشخص می‌کند Nginx چگونه به درخواست‌های یک دامنه یا پورت خاص پاسخ دهد.

ساخت اولین Server Block برای وب‌سایت

برای میزبانی یک وب‌سایت، باید یک server block اختصاصی بسازید. فرض کنید می‌خواهید سایتی با دامنه example.com راه‌اندازی کنید. ابتدا پوشه‌ای برای فایل‌های سایت بسازید:

mkdir -p /var/www/example.com/html
chown -R www-data:www-data /var/www/example.com/html

سپس یک فایل پیکربندی جدید بسازید:

nano /etc/nginx/sites-available/example.com

محتوای زیر را در آن قرار دهید. این پیکربندی یک server block پایه برای سرو محتوای ایستا تعریف می‌کند:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

حالا این سایت را با ساخت یک لینک نمادین در پوشه sites-enabled فعال کنید:

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

پیش از ری‌استارت، همیشه صحت پیکربندی را بررسی کنید تا از خطاهای نوشتاری جلوگیری شود:

nginx -t

اگر پیام syntax is ok و test is successful نمایش داده شد، تغییرات را با فرمان reload اعمال کنید. برخلاف restart، دستور reload بدون قطع اتصال‌های فعلی، پیکربندی جدید را بارگذاری می‌کند:

systemctl reload nginx

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

یکی از قدرتمندترین کاربردهای Nginx، عمل کردن به‌عنوان پراکسی معکوس در جلوی اپلیکیشن‌های وب است. فرض کنید یک اپلیکیشن Node.js روی پورت ۳۰۰۰ در حال اجراست و می‌خواهید کاربران از طریق دامنه به آن دسترسی داشته باشند. در این حالت server block شما به شکل زیر خواهد بود:

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

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

در این پیکربندی، دستور proxy_pass تمام درخواست‌ها را به اپلیکیشن پشتی هدایت می‌کند و هدرهای proxy_set_header اطلاعاتی مانند آدرس واقعی کاربر و پروتکل اصلی را به اپلیکیشن منتقل می‌کنند. این هدرها برای عملکرد صحیح بسیاری از فریم‌ورک‌ها ضروری هستند. با همین الگو می‌توانید ده‌ها اپلیکیشن مختلف را پشت یک سرور Nginx واحد مدیریت کنید.

فعال‌سازی HTTPS رایگان با Let's Encrypt

امروزه داشتن گواهی SSL برای هر وب‌سایت الزامی است. با ابزار رایگان Certbot می‌توانید گواهی معتبر از Let's Encrypt دریافت کنید و آن را روی Nginx فعال نمایید. ابتدا Certbot و افزونه Nginx آن را نصب کنید:

apt install certbot python3-certbot-nginx -y

سپس با یک دستور، گواهی را دریافت و به‌طور خودکار در پیکربندی Nginx اعمال کنید:

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

Certbot در حین اجرا چند سوال ساده می‌پرسد، از جمله ایمیل شما و اینکه آیا می‌خواهید ترافیک HTTP به‌طور خودکار به HTTPS هدایت شود. با انتخاب گزینه redirect، امنیت سایت شما تضمین می‌شود. گواهی‌های Let's Encrypt هر ۹۰ روز منقضی می‌شوند، اما Certbot یک تایمر systemd نصب می‌کند که تمدید را خودکار انجام می‌دهد. برای اطمینان از عملکرد تمدید می‌توانید آن را شبیه‌سازی کنید:

certbot renew --dry-run

بهینه‌سازی عملکرد و امنیت Nginx

پس از راه‌اندازی اولیه، چند تنظیم می‌تواند سرعت و امنیت سایت شما را به‌شکل چشمگیری بهبود دهد. جدول زیر مهم‌ترین بهینه‌سازی‌ها را خلاصه می‌کند:

تنظیمهدفمقدار پیشنهادی
gzipفشرده‌سازی پاسخ‌ها و کاهش حجم انتقالon
keepalive_timeoutمدیریت اتصال‌های پایدار65
worker_processesتعداد پردازه‌های کارگرauto
server_tokensمخفی‌سازی نسخه Nginxoff

برای فعال‌سازی فشرده‌سازی gzip، این خطوط را در بلوک http فایل nginx.conf اضافه کنید:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1024;

همچنین برای محتوای ایستا مانند تصاویر و فایل‌های CSS، تنظیم هدرهای کش مرورگر باعث می‌شود کاربران در بازدیدهای بعدی سریع‌تر سایت را ببینند. افزودن هدرهای امنیتی مانند X-Frame-Options و X-Content-Type-Options نیز از حملات رایج جلوگیری می‌کند. برای مطالعه راهنماهای بیشتر درباره مدیریت سرور، به بخش مقالات رپیدو سرور سر بزنید.

سرو کردن اپلیکیشن‌های PHP با PHP-FPM

یکی از پرکاربردترین سناریوها در نصب Nginx روی لینوکس، اجرای اپلیکیشن‌های PHP مانند وردپرس، لاراول یا سایر سیستم‌های مدیریت محتواست. برخلاف Apache، وب‌سرور Nginx خودش PHP را پردازش نمی‌کند و این کار را به سرویسی به نام PHP-FPM (FastCGI Process Manager) می‌سپارد. ابتدا PHP-FPM را نصب کنید:

apt install php-fpm php-mysql -y

سپس در server block خود، بلوکی برای پردازش فایل‌های PHP اضافه کنید. توجه داشته باشید که نسخه PHP در مسیر سوکت ممکن است متفاوت باشد:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

در این پیکربندی، هر درخواستی که به یک فایل با پسوند php ختم شود، به سوکت PHP-FPM ارسال می‌شود تا پردازش گردد و نتیجه به کاربر بازگردد. پس از افزودن این بلوک، همیشه ابتدا پیکربندی را با nginx -t بررسی و سپس با reload اعمال کنید. این معماری جداسازی وظایف باعث می‌شود Nginx بتواند هم‌زمان محتوای ایستا را با سرعت بالا سرو کند و پردازش‌های سنگین PHP را به فرآیندهای مجزا بسپارد.

پیکربندی Nginx به‌عنوان متعادل‌کننده بار

وقتی ترافیک سایت شما آن‌قدر زیاد می‌شود که یک سرور پاسخگو نیست، می‌توانید از Nginx به‌عنوان متعادل‌کننده بار (Load Balancer) استفاده کنید تا درخواست‌ها را میان چند سرور پشتی توزیع کند. برای این کار، ابتدا یک بلوک upstream تعریف می‌کنید که فهرست سرورهای پشتی را مشخص می‌کند:

upstream backend_servers {
    server 10.0.0.11:3000;
    server 10.0.0.12:3000;
    server 10.0.0.13:3000;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
    }
}

به‌طور پیش‌فرض، Nginx از الگوریتم Round Robin استفاده می‌کند که درخواست‌ها را به‌نوبت میان سرورها پخش می‌کند. الگوریتم‌های دیگری مانند least_conn (ارسال به سروری با کمترین اتصال فعال) و ip_hash (ارسال درخواست‌های یک کاربر همیشه به یک سرور) نیز در دسترس هستند. این قابلیت به شما اجازه می‌دهد سایت خود را به‌صورت افقی مقیاس دهید و در برابر خرابی یک سرور، مقاومت بالایی داشته باشید.

مدیریت لاگ‌ها و نظارت بر ترافیک

نظارت مستمر بر لاگ‌ها بخش مهمی از نگهداری یک وب‌سرور سالم است. Nginx دو نوع لاگ اصلی تولید می‌کند: لاگ دسترسی (access log) که تمام درخواست‌ها را ثبت می‌کند و لاگ خطا (error log) که مشکلات را نمایش می‌دهد. برای مشاهده زنده درخواست‌های ورودی:

tail -f /var/log/nginx/access.log

می‌توانید فرمت لاگ را نیز سفارشی کنید تا اطلاعات مورد نظر خود مانند زمان پاسخ‌دهی را ثبت کنید. برای تحلیل سریع لاگ‌ها، ابزارهای خط فرمان بسیار مفید هستند. برای مثال، برای یافتن ۱۰ آدرس IP که بیشترین درخواست را فرستاده‌اند:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

این نوع تحلیل به شما کمک می‌کند الگوهای ترافیک غیرعادی، تلاش‌های حمله یا رفتار ربات‌ها را شناسایی کنید. همچنین توصیه می‌شود از logrotate برای چرخش خودکار لاگ‌ها استفاده کنید تا فایل‌های لاگ بیش از حد بزرگ نشوند و فضای دیسک سرور را پر نکنند.

عیب‌یابی مشکلات رایج Nginx

در مسیر کار با Nginx ممکن است با خطاهایی روبه‌رو شوید. نخستین منبع برای عیب‌یابی، فایل لاگ خطاست:

tail -f /var/log/nginx/error.log

خطای رایج 502 Bad Gateway معمولاً به این معناست که اپلیکیشن پشتی که Nginx به آن پراکسی می‌کند در حال اجرا نیست یا روی پورت اشتباه گوش می‌دهد. خطای 403 Forbidden اغلب ناشی از مجوزهای نادرست فایل یا پوشه است. خطای 404 Not Found نشان می‌دهد مسیر root یا فایل index به‌درستی تنظیم نشده است. با بررسی دقیق لاگ‌ها و اجرای nginx -t پیش از هر ری‌استارت، می‌توانید بیشتر این مشکلات را به‌سرعت شناسایی و برطرف کنید.

یک نکته مهم دیگر، بررسی وضعیت فایروال سرور است. گاهی اوقات Nginx به‌درستی کار می‌کند اما فایروال پورت‌های ۸۰ و ۴۴۳ را مسدود کرده و کاربران نمی‌توانند به سایت دسترسی داشته باشند. در اوبونتو با ابزار ufw می‌توانید این پورت‌ها را باز کنید:

ufw allow 'Nginx Full'
ufw reload

پروفایل «Nginx Full» هر دو پورت HTTP و HTTPS را مجاز می‌کند. همچنین اگر تغییری در پیکربندی دادید و نتیجه را نمی‌بینید، به یاد داشته باشید که مرورگرها اغلب پاسخ‌ها را کش می‌کنند؛ بنابراین برای آزمایش دقیق، از حالت ناشناس مرورگر یا ابزار خط فرمان curl استفاده کنید تا پاسخ واقعی سرور را ببینید. عادت به بررسی سیستماتیک لاگ، پیکربندی و فایروال، عیب‌یابی را به فرآیندی سریع و قابل‌اعتماد تبدیل می‌کند.

سوالات متداول

برای نصب Nginx روی لینوکس به چه پیش‌نیازهایی نیاز دارم؟

تنها به یک سرور لینوکسی با دسترسی root یا کاربر با مجوز sudo نیاز دارید. توزیع‌های اوبونتو، دبیان، CentOS و AlmaLinux همگی از Nginx پشتیبانی می‌کنند و نصب آن تنها چند دقیقه زمان می‌برد.

تفاوت reload و restart در Nginx چیست؟

دستور reload پیکربندی جدید را بدون قطع اتصال‌های فعلی بارگذاری می‌کند و برای تغییرات معمول ایده‌آل است. اما restart سرویس را کاملاً متوقف و دوباره اجرا می‌کند که باعث قطع لحظه‌ای اتصال‌ها می‌شود؛ بنابراین تا حد امکان از reload استفاده کنید.

آیا می‌توانم چند وب‌سایت را روی یک سرور Nginx میزبانی کنم؟

بله. با ساخت یک server block جداگانه برای هر دامنه در پوشه sites-available و فعال‌سازی آن، می‌توانید ده‌ها سایت مستقل را روی یک سرور واحد اجرا کنید. به این قابلیت میزبانی مجازی مبتنی بر نام (Name-based Virtual Hosting) گفته می‌شود.

گواهی SSL رایگان Let's Encrypt چقدر اعتبار دارد؟

گواهی‌های Let's Encrypt به مدت ۹۰ روز معتبر هستند، اما Certbot به‌صورت خودکار آن‌ها را پیش از انقضا تمدید می‌کند. بنابراین پس از تنظیم اولیه دیگر نیازی به دخالت دستی نیست و سایت شما همیشه گواهی معتبر خواهد داشت.