نصب Nginx روی Ubuntu و رفع خطاهای هنگام نصب
در این مقاله میخوانید
Nginx یکی از محبوبترین و قدرتمندترین وبسرورهای متنباز است که به دلیل سرعت بالا، مصرف کم منابع و پایداری، انتخاب اول بسیاری از مدیران سرور محسوب میشود. در سیستمعامل Ubuntu، بهویژه نسخههای Server، نصب و راهاندازی Nginx بسیار ساده و سریع انجام میشود. در این آموزش از بخش آموزش اوبونتو در وبلاگ پارسپک، به معرفی Nginx و دلیل استفاده از آن میپردازیم. در آخر هم نحوه نصب Nginx روی Ubuntu را آموزش میدهیم. با ما همراه باشید.
Nginx چیست؟
Nginx یک وبسرور متنباز و قدرتمند است که علاوه بر ارائه محتوای وب، بهعنوان Reverse Proxy و Load Balancer و HTTP Cache نیز استفاده میشود. معماری event-driven این وبسرور باعث شده بتواند هزاران اتصال همزمان را با مصرف منابع بسیار کم مدیریت کند.
در مقایسه با Apache، وبسرور Nginx در ترافیکهای بالا عملکرد بهتری دارد و به همین دلیل در بسیاری از زیرساختهای مدرن و استکهایی مانند LEMP شامل Linux, Nginx, MySQL, PHP به کار گرفته میشود.
- دلیل استفاده از Nginx در Ubuntu
- استفاده از Nginx در Ubuntu به دلایل زیر بسیار رایج است:
- سازگاری کامل با Ubuntu Server
- مصرف کمتر RAM و CPU نسبت به Apache
- پایداری بالا در ترافیکهای سنگین
- مناسب برای راهاندازی Reverse Proxy و سرویسهای مدرن
- نصب و مدیریت ساده از طریق Terminal و systemctl
این ویژگیها در کنار هم باعث میشوند که Nginx گزینهای ایدهآل برای سرورهای ابری و VPS باشد.
هر آنچه که باید در مورد Nginx و کاربردهای آن بدانید را در مقاله زیر بخوانید:
پیشنیازهای نصب Nginx در Ubuntu
قبل از شروع نصب، مطمئن شوید شرایط زیر فراهم است:
- سیستمعامل Ubuntu (ترجیحا نسخه های جدیدتر)
- دسترسی کاربر با سطح sudo
- اتصال اینترنت فعال
- حداقل 512 مگابایت RAM
- دسترسی به Terminal
- فعال بودن یا امکان تنظیم Firewall مانند UFW
- آزاد بودن پورتهای 80 و 443
- در صورت استفاده از دامنه، تنظیم صحیح DNS
نکته مهم:
اگر Apache یا وبسرور دیگری روی پورت 80 یا 443 فعال است، قبل از نصب Nginx باید متوقف شود.
آموزش نصب 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
۴. ساخت 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
۱. خطا: 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 روی اوبونتو عملی مستقیم و سریع است؛ بهروزرسانی بستهها، نصب با apt، تنظیم server blockها، اجرای تست کانفیگ و فعالسازی SSL با Certbot مراحل اصلی را تشکیل میدهند. مهم است که پیش از نصب فضای لازم و دسترسیها را بررسی کنید، پس از نصب کانفیگها را با nginx -t تست کنید، لاگها را برای عیبیابی بخوانید و تنظیمات امنیتی ابتدایی مانند server_tokens off و هدرهای امنیتی و TLS مناسب را اعمال کنید. رفع خطاهای متداول معمولاً با بررسی پورتها، مجوزها و سینتکس کانفیگ حل میشود.
سوالات متداول
چگونه بفهمم Nginx در حال اجراست؟
با دستور زیر وضعیت سرویس را بررسی کنید:
sudo systemctl status nginx
همچنین میتوانید در مرورگر آدرس IP سرور را وارد کنید و بررسی کنید آیا صفحه دیفالت nginx لود می شود یا خیر.
بهترین روش برای فعالسازی 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