آموزش لینوکس

نصب وب سرور nginx چیست؟ آموزش کامل نصب و راه‌اندازی روی اوبونتو

nginx یک وب سرور سبک و سریع است که با چند دستور روی اوبونتو نصب می‌شود. این راهنما نصب، تنظیم فایروال، ساخت اولین سایت و رفع خطاهای رایج را قدم‌به‌قدم پوشش می‌دهد.

تیم فنی پاسارگاد میزبان(مهندسی زیرساخت) 6 دقیقه مطالعه
ترمینال لینوکس در حال نصب وب سرور nginx روی سرور اوبونتو و صفحه خوش‌آمدگویی nginx در مرورگر
ترمینال لینوکس در حال نصب وب سرور nginx روی سرور اوبونتو و صفحه خوش‌آمدگویی nginx در مرورگر

nginx (تلفظ: انجین‌ایکس) یک وب سرور متن‌باز است که درخواست‌های HTTP و HTTPS را می‌گیرد و فایل‌های سایت را تحویل می‌دهد یا درخواست را به یک برنامه پشتی مثل PHP-FPM یا Node.js پاس می‌دهد. نصب وب سرور nginx روی اوبونتو عملاً با دو دستور apt update و apt install nginx تمام می‌شود؛ کار اصلی بعد از نصب است: باز کردن پورت‌ها، ساختن server block برای دامنه و گرفتن گواهی SSL. این راهنما همین مسیر را از صفر تا یک سایت بالا آمده جلو می‌برد.

وب سرور nginx چیست و کجا به کار می‌آید

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

کاربردهای رایج nginx:

  • سرو فایل استاتیک: HTML، CSS، تصاویر و خروجی build فریم‌ورک‌هایی مثل React و Vue.
  • ریورس پراکسی: جلوی اپلیکیشن Node.js، پایتون (Gunicorn/Uvicorn) یا داکر می‌نشیند و درخواست را به پورت داخلی می‌فرستد.
  • اجرای PHP همراه PHP-FPM: برای وردپرس و لاراول.
  • پایان دادن به SSL: گواهی HTTPS روی nginx نصب می‌شود و برنامه پشتی درگیر رمزنگاری نمی‌شود.
  • لود بالانسر ساده: پخش درخواست بین چند سرور با بلوک upstream.

پیش‌نیازهای نصب: سرور، دسترسی و دامنه

برای این آموزش یک سرور اوبونتو ۲۲.۰۴ یا ۲۴.۰۴ لازم داری. منابع زیادی نمی‌خواهد؛ برای یک سایت استاتیک یا تست، ۱ هسته و ۱ گیگ رم کافی است. اگر هنوز سرور نداری، در راهنمای خرید سرور مجازی ایران و خارج توضیح داده‌ایم که لوکیشن را بر اساس مخاطب سایت انتخاب کنی: مخاطب داخلی معمولاً با لوکیشن ایران تأخیر کمتری می‌گیرد.

چک‌لیست قبل از شروع:

  • دسترسی SSH با کاربری که sudo دارد (آموزش اتصال به سرور لینوکس با SSH)
  • یک دامنه که رکورد A آن به آی‌پی سرور اشاره می‌کند (برای مرحله SSL)
  • مطمئن شدن از اینکه آی‌پی سرور از داخل ایران باز می‌شود

مورد آخر را جدی بگیر. اگر بعد از نصب، صفحه از خارج باز شد ولی از ایران نه، احتمالاً مشکل از nginx نیست و آی‌پی محدود شده است. در مطلب چرا آی‌پی سرور از ایران باز نمی‌شود و چطور عوضش کنیم؟ روش تشخیصش را نوشته‌ایم. در پاسارگاد میزبان آی‌پی‌ها قبل از تحویل از ایران تست می‌شوند و اگر لازم شد از پنل قابل تعویض‌اند.

نصب وب سرور nginx روی اوبونتو قدم به قدم

مراحل: مراحل نصب nginx روی اوبونتو

۱. نصب بسته

sudo apt update
sudo apt install nginx -y

نسخه‌ای که از مخزن رسمی اوبونتو نصب می‌شود روی ۲۴.۰۴ خانواده 1.24 و روی ۲۲.۰۴ خانواده 1.18 است. برای بیشتر سایت‌ها همین کافی است و آپدیت‌های امنیتی‌اش هم از طریق خود اوبونتو می‌رسد. اگر قابلیت جدیدتری لازم داری، مخزن رسمی nginx.org را اضافه کن؛ مستندات آن در nginx.org/en/docs هست.

۲. بررسی سرویس

systemctl status nginx
nginx -v

در خروجی باید active (running) ببینی. اوبونتو سرویس را بعد از نصب خودکار فعال می‌کند، ولی برای اطمینان:

sudo systemctl enable --now nginx

۳. باز کردن پورت‌ها در فایروال

بسته nginx پروفایل‌های آماده‌ای برای ufw اضافه می‌کند: Nginx HTTP (پورت ۸۰)، Nginx HTTPS (پورت ۴۴۳) و Nginx Full (هر دو).

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

۴. تست

curl -I http://localhost

اگر HTTP/1.1 200 OK برگشت، آدرس آی‌پی سرور را در مرورگر باز کن؛ باید صفحه «Welcome to nginx!» را ببینی. این صفحه از فایل /var/www/html/index.nginx-debian.html می‌آید.

ساختار فایل‌های nginx و راه‌اندازی اولین سایت

قبل از ویرایش هر چیزی، بدان کدام فایل کجاست:

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

منطق کار ساده است: پیکربندی را در sites-available می‌نویسی و با یک symlink در sites-enabled فعالش می‌کنی. برای غیرفعال کردن هم فقط لینک را پاک می‌کنی و فایل اصلی دست‌نخورده می‌ماند.

ساخت server block برای دامنه

اول پوشه سایت و یک صفحه تستی:

sudo mkdir -p /var/www/example.com/html
echo '<h1>example.com works</h1>' | sudo tee /var/www/example.com/html/index.html
sudo chown -R www-data:www-data /var/www/example.com

بعد فایل /etc/nginx/sites-available/example.com را بساز:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html;

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

فعال‌سازی و بارگذاری مجدد:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

فعال کردن HTTPS با Certbot

وقتی رکورد DNS دامنه به سرور رسید، گواهی رایگان Let's Encrypt را بگیر:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot خودش بلوک listen 443 ssl را به فایل سایت اضافه می‌کند و یک تایمر systemd برای تمدید خودکار می‌سازد. با sudo certbot renew --dry-run می‌توانی تمدید را تست کنی.

خطاهای رایج بعد از نصب nginx و راه‌حل آن‌ها

بیشتر مشکلات بعد از نصب به چند خطای تکراری برمی‌گردد. اولین جایی که باید نگاه کنی sudo tail -n 50 /var/log/nginx/error.log است.

  • bind() to 0.0.0.0:80 failed (98: Address already in use): یک سرویس دیگر (معمولاً آپاچی) پورت ۸۰ را گرفته. با sudo ss -tlnp | grep &#39;:80&#39; ببین کیست و اگر لازمش نداری sudo systemctl disable --now apache2 را بزن.
  • 403 Forbidden: یا فایل index در مسیر root وجود ندارد، یا کاربر www-data اجازه خواندن پوشه را ندارد. نام فایل و مالکیت پوشه را چک کن.
  • 502 Bad Gateway: nginx سالم است ولی برنامه پشتی جواب نمی‌دهد. اگر PHP داری وضعیت php8.3-fpm (یا نسخه نصب‌شده خودت) را ببین؛ اگر ریورس پراکسی است، مطمئن شو اپلیکیشن روی پورتی که در proxy_pass نوشته‌ای بالا است.
  • 413 Request Entity Too Large: موقع آپلود فایل بزرگ می‌آید. مقدار client_max_body_size 50M; را در بلوک http یا server اضافه کن.
  • سایت از خارج باز می‌شود ولی از ایران نه: این دیگر کار nginx نیست؛ مشکل در سطح آی‌پی است و همان مطلب تعویض آی‌پی که بالاتر لینک دادیم به کارت می‌آید.

nginx یا آپاچی؛ کدام را نصب کنم؟

مقایسه: مقایسه nginx و آپاچی
معیارnginxآپاچی
معماریرویدادمحور، worker محدودپروسس یا ترد برای هر اتصال (بسته به MPM)
مصرف رم زیر بار زیادکم و قابل پیش‌بینیبا افزایش اتصال بالا می‌رود
تنظیمات پوشه‌ای (.htaccess)ندارد؛ همه چیز در فایل اصلیدارد
ریورس پراکسیکاربرد اصلی و رایجبا mod_proxy
PHPفقط از طریق PHP-FPMmod_php یا PHP-FPM

اگر اپلیکیشن مدرن (Node، پایتون، داکر) داری یا سایت استاتیک، nginx انتخاب طبیعی است. اگر هاست قدیمی‌ای را منتقل می‌کنی که کلی قانون .htaccess دارد، آپاچی دردسر کمتری دارد؛ یا باید آن قانون‌ها را به سینتکس nginx ترجمه کنی. خیلی‌ها هم هر دو را با هم استفاده می‌کنند: nginx جلو برای SSL و فایل استاتیک، آپاچی پشت برای PHP.

بعد از بالا آمدن سایت، امنیت خود سرور را رها نکن. غیرفعال کردن ورود root، کلید SSH و fail2ban قدم‌های بعدی‌اند که در امن‌سازی سرور اوبونتو در ۱۰ قدم پوشش داده‌ایم. یک تنظیم ساده مخصوص nginx هم بگذار: server_tokens off; در بلوک http فایل nginx.conf تا شماره نسخه در هدرها و صفحه‌های خطا نمایش داده نشود.

جمع‌بندی

nginx وب سروری سبک و سریع است که هم فایل استاتیک سرو می‌کند و هم جلوی اپلیکیشن‌ها به عنوان ریورس پراکسی می‌نشیند؛ نصبش با apt install nginx تمام می‌شود و بقیه کار باز کردن پورت با ufw، ساختن server block در sites-available، چک کردن با nginx -t و گرفتن SSL با Certbot است. بهترین راه یاد گرفتنش این است که یک بار روی سرور تستی همه این مراحل را خودت بزنی و خطاها را در error.log ببینی. با پرداخت ساعتی به تومان در پاسارگاد میزبان، یک سرور تستی چند ساعته هزینه چندانی ندارد و بعد از کار می‌توانی حذفش کنی؛ از ساخت سرور ساعتی ایران و خارج شروع کن و پلن‌ها را هم در قیمت سرورهای ساعتی ببین.

پرسش‌های پرتکرار

وب سرور nginx چیست؟

nginx یک وب سرور متن‌باز و رویدادمحور است که فایل‌های سایت را سرو می‌کند و می‌تواند به عنوان ریورس پراکسی، لود بالانسر و محل نصب گواهی SSL جلوی اپلیکیشن‌ها قرار بگیرد.

دستور نصب nginx روی اوبونتو چیست؟

ابتدا sudo apt update و سپس sudo apt install nginx را اجرا کن. بعد با systemctl status nginx وضعیت سرویس را چک کن و با sudo ufw allow 'Nginx Full' پورت‌های ۸۰ و ۴۴۳ را باز کن.

فایل تنظیمات nginx کجاست؟

تنظیمات اصلی در /etc/nginx/nginx.conf است و پیکربندی هر سایت در /etc/nginx/sites-available قرار می‌گیرد و با یک symlink در /etc/nginx/sites-enabled فعال می‌شود.

چرا بعد از نصب nginx خطای 502 می‌گیرم؟

خطای 502 یعنی nginx کار می‌کند ولی برنامه پشتی مثل PHP-FPM یا اپلیکیشن Node جواب نمی‌دهد. وضعیت آن سرویس و پورت نوشته‌شده در proxy_pass را بررسی کن.

اشتراک‌گذاری: تلگرام واتساپ ایکس

تیم فنی پاسارگاد میزبان

مهندسی زیرساخت

تیم فنی پاسارگاد میزبان — تجربه‌های راه‌اندازی و نگهداری سرور ابری را به زبان ساده می‌نویسیم.

سرور ساعتی ایران و خارج، در کمتر از یک دقیقه

پرداخت ساعتی به تومان، آی‌پی تست‌شده از ایران و تعویض آدرس با یک کلیک. ثبت‌نام رایگان است و همین حالا می‌توانید سرورتان را بسازید.

ساخت سرور ساعتی

آخرین بازبینی این مقاله: