آموزش نصب nginx روی ubuntu

مراحل نصب nginx روی اوبونتو
Avatar
نویسنده: علیرضا برزودی
چهارشنبه 12 آذر 1404
مطالعه: ۹ دقیقه ۰ نظر ۱۰ بازدید

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

پیش‌نیازهای نصب Nginx روی Ubuntu

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

  • سیستم‌عامل Ubuntu نسخه 18.04، 20.04، 22.04 یا بالاتر
  • دسترسی کاربر با سطح sudo
  • حداقل 512 مگابایت RAM (پیشنهاد: 1 گیگابایت یا بیشتر)
  • فضای کافی در دیسک برای لاگ‌ها و فایل‌های وب
  • پورت‌های 80 (HTTP) و 443 (HTTPS) باز در فایروال
  • در صورت داشتن دامنه، تنظیم رکورد A/AAAA به IP سرور
  • ابزارهای نرم‌افزاری: apt به‌روز و در صورت نیاز Certbot برای SSL

نکته:

اگر Apache یا وب‌سرور دیگری روی پورت‌های 80 یا 443 در حال اجراست، ابتدا آن را غیرفعال کنید چرا که دو وب سرور نمی‌توانند هم زمان بر روی یک پورت مشترک اجرا شوند.

آموزش نصب Nginx روی Ubuntu

۱. به‌روزرسانی بسته‌ها و نصب Nginx

sudo apt update && sudo apt upgrade -y
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

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

خرید سرور از پارس‌پک

بدون شک بهترین ارائه‌دهنده انواع سرورها در ایران پارس‌پک است. برای تهیه سرورهایی با لوکیشن‌های متنوع، پشتیبانی شبانه‌روزی و پایداری دائمی روی لینک زیر کلیک کنید:

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

در صورتی که فایروال فعالی بر روی سرور خود در حال اجرا دارید، لازم است پورت‌های 80 و 443 برای عملکرد صحیح http و https و وب سرور nginx شما، باز شوند، برای مثال اگر از فایروال UFW بر روی سرور خود استفاده می‌کنید با دستورات زیر می‌توانید پورت‌های مورد نیاز را باز کنید.

sudo ufw allow 'Nginx Full'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

۳. ساخت دایرکتوری وب‌سایت و تنظیم مجوزها

در این ساختار، پوشه /var/www/ محل نگهداری فایل‌های سایت است، پوشه مانند example.com برای هر دامنه مجزا ایجاد می‌شود و پوشه‌ی html شامل فایل‌های اصلی وب‌سایت (مثل index.html یا فایل‌های PHP) است. این جداسازی باعث نظم و مدیریت آسان‌تر چند وب‌سایت روی یک سرور می‌شود.

sudo mkdir -p /var/www/example.com/html

در تنظیمات زیر نیز، دستور chown مالکیت پوشه را به کاربر فعلی و گروه www-data (کاربر پیش‌فرض Nginx) می‌دهد تا وب‌سرور بتواند فایل‌ها را بخواند. دستور chmod 755 نیز سطح دسترسی را طوری تنظیم می‌کند که مالک بتواند فایل‌ها را ویرایش کند، اما سایر کاربران فقط امکان خواندن و اجرای آن‌ها را داشته باشند؛ این کار از تغییرات ناخواسته و مشکلات امنیتی جلوگیری می‌کند.

sudo chown -R $USER:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www

۴. ساخت Server Block (Virtual Host)

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

sudo nano /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 index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
include /etc/nginx/snippets/letsencrypt.conf;
}

این بلاک server وظیفه دارد مشخص کند وب‌سرور Nginx چگونه درخواست‌های مربوط به دامنه‌ی مشخص‌شده را مدیریت کند. دستور listen پورت (در اینجا 80 برای HTTP) را تعیین می‌کند، server_name نام دامنه‌هایی را که این کانفیگ پاسخ می‌دهد مشخص می‌سازد، root مسیر فایل‌های سایت را تعریف می‌کند و index ترتیب فایل‌هایی است که به‌صورت پیش‌فرض بارگذاری می‌شوند. در بخش location /، Nginx تلاش می‌کند فایل درخواست‌شده را پیدا کند و اگر موجود نبود، خطای 404 بازمی‌گرداند. دستور include نیز فایل تنظیمات Let’s Encrypt را برای مدیریت گواهی SSL اضافه می‌کند.

پس از ایجاد فایل کانفیگ، لینک نمادین ایجاد کنید تا فعال شود:

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

و پس از آن:

sudo nginx -t

دستور nginx -t برای تست صحت و اعتبار فایل‌های پیکربندی Nginx استفاده می‌شود. این دستور بدون اجرای تغییرات، فایل‌های تنظیمات را بررسی کرده و در صورت وجود خطا، محل دقیق آن را نمایش می‌دهد. اجرای آن قبل از reload یا restart از بروز خطا و قطع سرویس جلوگیری می‌کند.

sudo systemctl reload nginx

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

۵. نصب SSL رایگان با Let’s Encrypt

sudo apt install certbot python3-certbot-nginx -y

در دستور اول، ابزار Certbot و افزونه‌ی مخصوص Nginx نصب می‌شوند تا بتوان به‌صورت خودکار گواهی SSL از Let’s Encrypt دریافت کرد.

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

در دستور دوم، Certbot گواهی واقعی SSL را برای دامنه‌های مشخص‌شده صادر و در فایل‌های پیکربندی Nginx اعمال می‌کند.

sudo certbot renew --dry-run

دستور سوم (–dry-run) هم برای تست تمدید خودکار گواهی‌ها است تا مطمئن شوید فرایند تمدید بدون خطا انجام می‌شود.

به منظور کسب اطلاعات بیشتر درباره نصب Nginx مقاله زیر را بخوانید:

آموزش نصب Nginx

رفع خطاهای رایج نصب Nginx

۱. خطا: Address already in use

علت: پورت 80 یا 443 توسط سرویس دیگری (مثل Apache) اشغال شده است.
راهکار:

sudo systemctl stop apache2
sudo systemctl disable apache2

اگر وب سرور دیگر مانند آپاچی فعال نبود، با دستور زیر بررسی کنید چه سرویسی بر روی پورت 80 در حال اجراست.

sudo ss -tulpn | grep :80

۲. خطا: nginx: [emerg] “server” directive is not allowed here

علت: بلاک server در جای نادرست قرار گرفته یا آکولاد بسته نشده است.
راهکار:

sudo nginx -t

خطاهای نمایش‌داده‌شده را بررسی و اصلاح کنید.

۳. خطا: صفحه سفید یا 403 Forbidden

علت: مجوزهای اشتباه پوشه یا نبود فایل index.

راهکار: بررسی کنید مسیر root درست باشد و فایل index وجود داشته باشد. همچنین:

sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/www

۴. خطا: خطای دریافت گواهی SSL با Certbot

علت: مشکل در دسترسی دامنه از طریق HTTP یا تنظیم نادرست DNS.

راهکار: بررسی رکورد DNS با دستور زیر:

dig example.com

و اطمینان از باز بودن پورت 80 برای Let’s Encrypt.

۵. خطا: Nginx پس از بهٰ‌روزرسانی بالا نمی‌آید.

علت: ناسازگاری یا خطا در فایل‌های پیکربندی.

راهکار:

sudo nginx -t
sudo journalctl -u nginx -e
sudo tail -f /var/log/nginx/error.log

ساختار فایل‌های کانفیگ Nginx چگونه است؟

ساختار فایل‌های پیکربندی در اوبونتو معمولاً به این شکل است:

  • /etc/nginx/nginx.conf → فایل اصلی تنظیمات کلی (worker، log، includeها)
  • /etc/nginx/sites-available/ → محل نگهداری فایل‌های سایت‌ها
  • /etc/nginx/sites-enabled/ → لینک فایل‌های فعال‌شده از پوشه بالا
  • /etc/nginx/snippets/ → تنظیمات مشترک (مثل SSL یا gzip)
  • /etc/nginx/conf.d/ → فایل‌های عمومی .conf که خودکار لود می‌شوند
  • /var/www/ → دایرکتوری فایل‌های وب‌سایت‌ها
  • /var/log/nginx/ → لاگ‌های دسترسی و خطا

نمونه فایل پیکربندی در مسیر /etc/nginx/sites-available/default قرار دارد که شامل یک Server Block پایه برای شروع است و می‌توانید آن را الگو قرار دهید.

تنظیمات امنیتی Nginx در اوبونتو

برای افزایش امنیت وب‌سرور خود، موارد زیر را اعمال کنید:

۱. پنهان‌کردن نسخه Nginx:

در فایل nginx.conf، این خط را اضافه کنید:

server_tokens off;

۲. افزودن هدرهای امنیتی:

add_header X-Frame-Options "SAMEORIGIN" always;

مانع از بارگذاری سایت شما در iframe دامنه‌های دیگر می‌شود و از حملات clickjacking جلوگیری می‌کند.

add_header X-Content-Type-Options "nosniff" always;

به مرورگر می‌گوید نوع MIME فایل‌ها را حدس نزند و فقط از نوع تعیین‌شده پیروی کند؛ این مورد جلوی اجرای فایل‌های مخرب را می‌گیرد.

add_header Referrer-Policy "no-referrer-when-downgrade" always;

کنترل می‌کند چه مقدار از اطلاعات ارجاع‌دهنده (referrer) برای سایت مقصد ارسال شود؛ این مقدار تنظیمی متعادل بین امنیت و عملکرد است.

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

مرورگر را مجبور می‌کند تا همیشه از HTTPS برای ارتباط با سایت شما استفاده کند و از downgrade به HTTP جلوگیری می‌کند.

۳. محدودسازی پروتکل‌ها و سایفرها:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

۴. محدودکردن اندازه فایل آپلودی:

client_max_body_size 10M;

۵. اعمال محدودیت درخواست‌ها:

برای جلوگیری از حملات DoS:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

۶. استفاده از Fail2Ban:

Fail2Ban را برای مسدودکردن IPهای مشکوک پیکربندی کنید تا از حملات brute-force و اسکن جلوگیری شود.

۷. به‌روزرسانی منظم:

sudo apt update && sudo apt upgrade -y

۸. تنظیم مجوزها و مالکیت فایل‌ها:

پوشه‌های وب باید متعلق به www-data باشند و مجوزها بیش از حد باز نباشند.

جمع‌بندی

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

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

چگونه بفهمم Nginx در حال اجراست؟

با دستور زیر وضعیت سرویس را بررسی کنید:

sudo systemctl status nginx

همچنین می‌توانید در مرورگر آدرس IP سرور را وارد کنید و بررسی کنید آیا صفحه دیفالت nginx لود می شود یا خیر.

آیا می‌توان Nginx و Apache را هم‌زمان اجرا کرد؟

بله، اما باید روی پورت‌های متفاوت کار کنند یا یکی از آن‌ها را به عنوان Reverse Proxy استفاده کنید.

بهترین روش برای فعال‌سازی SSL چیست؟

استفاده از Certbot برای دریافت گواهی رایگان Let’s Encrypt و پیکربندی خودکار HTTPS سریع‌ترین و مطمئن‌ترین روش است.

لاگ‌های Nginx کجا ذخیره می‌شوند؟

در مسیر زیر:

/var/log/nginx/access.log
/var/log/nginx/error.log
برای بررسی لحظه‌ای خطاها:
sudo tail -f /var/log/nginx/error.log

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.