اگر از Nginx روی سرور لینوکسی استفاده میکنید، فعالسازی HTTPS یکی از مهمترین اقداماتی است که باید برای امنیت وبسایت انجام دهید. استفاده از گواهی SSL باعث رمزنگاری ارتباط بین کاربر و سرور میشود و از سرقت اطلاعات، حملات Man-in-the-Middle و بسیاری از مشکلات امنیتی جلوگیری میکند.
خوشبختانه با استفاده از Let’s Encrypt میتوانید بهصورت رایگان برای دامنه خود SSL دریافت کنید و با ابزار Certbot فرایند نصب و تمدید گواهی را تقریبا بهصورت خودکار انجام دهید. در این آموزش یاد میگیرید چگونه روی Ubuntu و وب سرور Nginx، گواهی SSL رایگان نصب کنید، HTTPS را فعال کنید و تمدید خودکار گواهی را تنظیم کنید.
Let’s Encrypt چیست؟
گواهینامه Let’s Encrypt یک مرجع صدور گواهی SSL رایگان است که امکان فعالسازی HTTPS را بدون پرداخت هزینه فراهم میکند.
این سرویس با استفاده از پروتکل ACME مالکیت دامنه را بررسی میکند و سپس گواهی SSL صادر میکند. ابزار Certbot نیز فرایند دریافت، نصب و تمدید گواهی را خودکار میکند.
برای نصب بهتر است ابتدا Nginx را روی سرور لینوکسی نصب و تنظیم کنید. همچنین استفاده از یک سرور مجازی پایدار یا سرور اختصاصی برای اجرای وبسایتهای HTTPS توصیه میشود.
پیشنیازهای نصب SSL روی Nginx
قبل از شروع آموزش، موارد زیر باید آماده باشند:
- یک سرور مجازی لینوکس Ubuntu 22.04 یا بالاتر
- نصب Nginx روی سرور اوبونتو
- دسترسی sudo
- دامنه متصل به IP سرور
- باز بودن پورتهای 80 و 443
همچنین باید رکوردهای DNS دامنه به IP سرور اشاره کنند:
- example.com
- www.example.com
اگر هنوز DNS دامنه را تنظیم نکردهاید، ابتدا رکوردهای A دامنه را به IP سرور متصل کنید.
مرحله اول نصب Certbot
ابزار Certbot مسئول دریافت و مدیریت گواهیهای SSL است.
ابتدا snap را بروزرسانی کنید:
sudo snap install core
sudo snap refresh core
اگر نسخه قدیمی Certbot روی سرور نصب است، آن را حذف کنید:
sudo apt remove certbot
سپس Certbot را نصب کنید:
sudo snap install --classic certbot
برای اجرای راحتتر دستور certbot، لینک زیر را ایجاد کنید:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
اگر از snap استفاده نمیکنید، میتوانید Certbot را از مخازن Ubuntu نصب کنید:
sudo apt update
sudo apt install certbot python3-certbot-nginx
مرحله دوم بررسی تنظیمات Nginx
Certbot باید بتواند فایل تنظیمات دامنه را در Nginx پیدا کند. به همین دلیل باید مقدار server_name بهدرستی تنظیم شده باشد.
فایل تنظیمات سایت را باز کنید:
sudo nano /etc/nginx/sites-available/example.com
بخش server_name باید مشابه نمونه زیر باشد:
server_name example.com www.example.com;
بعد از اعمال تغییرات، تنظیمات Nginx را بررسی کنید:
sudo nginx -t
اگر خطایی وجود نداشت، Nginx را Reload کنید:
sudo systemctl reload nginx
مرحله سوم باز کردن پورت HTTPS در فایروال
اگر فایروال UFW فعال است، باید اجازه دسترسی HTTPS را صادر کنید.
ابتدا وضعیت فعلی فایروال را بررسی کنید:
sudo ufw status
سپس پروفایل کامل Nginx را فعال کنید:
sudo ufw allow 'Nginx Full'
و دسترسی HTTP قدیمی را حذف کنید:
sudo ufw delete allow 'Nginx HTTP'
بعد از آن دوباره وضعیت فایروال را بررسی کنید:
sudo ufw status
مرحله چهارم دریافت SSL رایگان برای Nginx
حالا میتوانید گواهی SSL را دریافت کنید.
دستور زیر را اجرا کنید:
sudo certbot --nginx -d example.com -d www.example.com
در طول فرایند نصب:
- ایمیل خود را وارد میکنید
- قوانین Let’s Encrypt را تایید میکنید
- Certbot بهصورت خودکار SSL را روی Nginx تنظیم میکند
پس از موفقیت، مسیر فایلهای SSL نمایش داده میشود:
/etc/letsencrypt/live/your_domain/fullchain.pem /etc/letsencrypt/live/your_domain/privkey.pem
در این مرحله HTTPS فعال میشود و تمام درخواستهای HTTP به HTTPS ریدایرکت خواهند شد.
اگر وبسایت را باز کنید، باید علامت قفل امنیتی در مرورگر نمایش داده شود.
مرحله پنجم بررسی تمدید خودکار SSL
گواهیهای Let’s Encrypt فقط 90 روز اعتبار دارند، اما Certbot بهصورت خودکار آنها را تمدید میکند.
برای بررسی وضعیت سرویس تمدید خودکار:
sudo systemctl status snap.certbot.renew.service
برای تست فرایند تمدید بدون اعمال تغییر واقعی:
sudo certbot renew --dry-run
اگر خطایی مشاهده نکردید، تمدید خودکار SSL بهدرستی فعال شده است.
همچنین میتوانید بعد از تمدید، Nginx را بهصورت خودکار Reload کنید:
sudo certbot renew --post-hook "systemctl reload nginx"
تنظیمات امنیتی پیشنهادی برای HTTPS
بعد از فعالسازی SSL بهتر است چند تنظیم امنیتی مهم را نیز روی Nginx اعمال کنید.
فعالسازی HSTS
برای مجبور کردن مرورگرها به استفاده از HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
استفاده از TLS مدرن
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
ریدایرکت HTTP به HTTPS
server {
<span "> listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
بررسی وضعیت SSL سایت
بعد از نصب SSL بهتر است وضعیت امنیتی سایت را بررسی کنید.
میتوانید از ابزارهای زیر استفاده کنید:
- SSL Labs Server Test
- Mozilla SSL Configuration Generator
همچنین این دستورات برای بررسی عملکرد HTTPS مفید هستند:
curl -I http://example.com curl -I https://example.com
مشکلات رایج هنگام نصب SSL روی Nginx
خطای ACME Challenge
اگر Let’s Encrypt نتواند دامنه را تایید کند، معمولا یکی از این مشکلات وجود دارد:
- بسته بودن پورت 80
- تنظیم نبودن DNS
- اشتباه بودن server_name
- وجود CDN یا فایروال محدودکننده
خطای DNS
بررسی کنید رکوردهای A و AAAA دامنه به IP صحیح سرور اشاره کنند.
مشکل Rate Limit
درخواستهای ناموفق زیاد ممکن است باعث محدود شدن IP توسط Let’s Encrypt شود. بهتر است هنگام تست از گزینه dry-run استفاده کنید.
مزایای استفاده از SSL روی Nginx
فعالسازی HTTPS فقط برای امنیت نیست و روی سئو و اعتماد کاربران نیز تاثیر زیادی دارد.
مهمترین مزایای SSL:
- رمزنگاری اطلاعات کاربران
- افزایش اعتماد بازدیدکنندگان
- بهبود سئو سایت
- جلوگیری از شنود اطلاعات
- افزایش امنیت فرمهای ورود و پرداخت
- جلوگیری از هشدار Not Secure مرورگرها
جمعبندی
در این آموزش یاد گرفتید چگونه با استفاده از Let’s Encrypt و Certbot روی Ubuntu و Nginx گواهی SSL رایگان نصب کنید. همچنین نحوه فعالسازی HTTPS، تنظیم تمدید خودکار گواهی، باز کردن پورتهای لازم در فایروال و اعمال تنظیمات امنیتی HTTPS را بررسی کردیم.
اگر از Nginx روی VPS لینوکس یا سرور اختصاصی استفاده میکنید، فعالسازی SSL یکی از مهمترین اقداماتی است که باید بعد از راهاندازی سرور انجام دهید. استفاده از HTTPS علاوه بر افزایش امنیت، باعث بهبود اعتماد کاربران و عملکرد بهتر سایت در موتورهای جستجو نیز میشود.


