آموزش نصب nginx روی ubuntu
در این مقاله میخوانید
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
۱. خطا: 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