
مقدمه ایمنسازی سرور Nginx با HTTPS نه تنها از دادهها محافظت میکند، بلکه رتبه سئو (SEO) و اعتماد کاربران را نیز افزایش میدهد.
Let’s Encrypt یک مرجع صدور گواهی (Certificate Authority یا CA) است که روشی آسان برای دریافت و نصب گواهینامههای رایگان TLS/SSL فراهم میکند و بدین ترتیب HTTPS رمزنگاریشده را روی وبسرورها فعال میسازد. این سازمان با یک کلاینت نرمافزاری به نام Certbot این فرآیند را ساده میکند که تا حد امکان کارها را خودکارسازی میکند. امروزه، کل مراحل دریافت و نصب گواهینامه روی هر دو سرور Apache و Nginx بهطور کامل خودکار شده است.
در این آموزش، یاد میگیرید که چگونه Nginx را با Let’s Encrypt در اوبونتو 24.04 با استفاده از Certbot ایمن کنید و SSL رایگان، ریدایرکتهای HTTPS، HSTS و تمدید خودکار گواهینامه را فعال نمایید.
این آموزش از یک فایل پیکربندی مجزای Nginx به جای فایل پیشفرض استفاده میکند. ما ایجاد یک بلاک سرور (Server Block) جدید برای هر دامنه را توصیه میکنیم. این رویکرد از بروز اشتباهات رایج جلوگیری میکند و پیکربندی پیشفرض را به عنوان یک گزینه پشتیبان نگه میدارد.
مدیریت Nginx و Let’s Encrypt را به پارمین کلود (Parmin Cloud) بسپارید. پلتفرم اپلیکیشن پارمین کلود به شما اجازه میدهد در عرض چند دقیقه مستقیماً از گیتهاب (GitHub) اپلیکیشن خود را دیپلوی کنید. این پلتفرم همچنین گواهینامههای SSL و مسیریابی (Routing) را برای شما مدیریت خواهد کرد.
نکات کلیدی:
- Let’s Encrypt گواهینامههای رایگان SSL/TLS ارائه میدهد که توسط تمام مرورگرهای اصلی معتبر هستند و نصب و تمدید خودکار آنها از طریق Certbot در اوبونتو انجام میشود.
- پلاگین Nginx در Certbot بهطور خودکار بلاکهای سرور را برای فعالسازی HTTPS، پیکربندی ریدایرکتها و اجرای دستورالعملهای SSL ویرایش میکند.
- گواهینامههای SSL در Let’s Encrypt فقط ۹۰ روز اعتبار دارند، اما Certbot یک تایمر systemd نصب میکند که روزی دو بار اجرا شده و گواهینامهها را ۳۰ روز قبل از انقضا بهطور خودکار تمدید میکند.
- چالش HTTP-01 نیازمند دسترسی عمومی به پورت ۸۰ است، در حالی که برای گواهینامههای وایلدکارت (Wildcard) یا سرورهای پشت CDN/پروکسی، چالش DNS-01 ضروری است.
- پس از دریافت گواهینامهها، امنیت انتقال سختگیرانه HTTP (HSTS) را با هدر
Strict-Transport-Securityفعال کنید تا مرورگرها را مجبور کنید فقط از طریق HTTPS متصل شوند. - Certbot گواهینامهها را در مسیر
/etc/letsencrypt/live/ذخیره میکند و بهطور خودکار به فایلهایfullchain.pem(گواهینامه + زنجیره) وprivkey.pem(کلید خصوصی) در پیکربندی Nginx ارجاع میدهد.
پیشنیازها برای دنبال کردن این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 24.04 که طبق راهنمای راهاندازی اولیه سرور پیکربندی شده باشد، شامل یک کاربر غیر روت با دسترسی sudo و فایروال.
- یک نام دامنه ثبتشده. در این آموزش از
example.comاستفاده میشود. - هر دو رکورد DNS زیر برای سرور شما تنظیم شده باشد. اگر از پارمین کلود استفاده میکنید، لطفاً برای جزئیات نحوه افزودن آنها به مستندات DNS ما مراجعه کنید:
- یک رکورد A با نام
example.comکه به آدرس IP عمومی سرور شما اشاره دارد. - یک رکورد A با نام
www.example.comکه به آدرس IP عمومی سرور شما اشاره دارد.
- یک رکورد A با نام
- وبسرور Nginx روی سرور نصب باشد. مطمئن شوید که یک بلاک سرور برای دامنه خود دارید. در این آموزش از مسیر
/etc/nginx/sites-available/example.comبه عنوان مثال استفاده میشود.
مرحله ۱ — نصب Certbot
اولین قدم برای استفاده از Let’s Encrypt جهت دریافت گواهینامه SSL، نصب نرمافزار Certbot روی سرور است.
Certbot و پلاگین Nginx آن را با apt نصب کنید:
Certbot اکنون آماده استفاده است، اما برای اینکه بتواند بهطور خودکار SSL را برای Nginx پیکربندی کند، باید بخشی از تنظیمات Nginx را بررسی کنیم.
مرحله ۲ — تایید پیکربندی Nginx
Certbot باید بتواند بلاک سرور درست را در پیکربندی Nginx شما پیدا کند تا بتواند بهطور خودکار SSL را تنظیم نماید. بهطور خاص، این کار را با جستجوی دستورالعمل server_name که با دامنه درخواستی شما مطابقت داشته باشد انجام میدهد.
اگر مرحله راهاندازی بلاک سرور را در نصب Nginx دنبال کردهاید، باید بلاک سرور دامنه خود را در مسیر /etc/nginx/sites-available/example.com داشته باشید که دستورالعمل server_name از قبل در آن تنظیم شده است.
برای بررسی، فایل پیکربندی دامنه خود را با nano یا ویرایشگر متن دلخواه خود باز کنید:
خط server_name موجود را پیدا کنید. باید شبیه به این باشد:
اگر اینطور است، از ویرایشگر خارج شوید و به مرحله بعد بروید. اگر نیست، آن را بهروزرسانی کنید. سپس فایل را ذخیره کرده، از ویرایشگر خارج شوید و نحو (Syntax) ویرایشهای خود را بررسی کنید:
اگر خطایی دریافت کردید، فایل بلاک سرور را دوباره باز کنید و غلطهای املایی یا کاراکترهای گمشده را بررسی کنید. هنگامی که نحو فایل پیکربندی شما درست بود، Nginx را برای بارگذاری پیکربندی جدید ریلود کنید:
اکنون Certbot میتواند بلاک سرور درست را پیدا کرده و آن را بهطور خودکار بهروزرسانی کند. در مرحله بعد، فایروال را برای اجازه دادن ترافیک HTTPS بهروزرسانی میکنیم.
مرحله ۳ — اجازه دادن HTTPS از طریق فایروال
اگر فایروال UFW را طبق راهنماهای پیشنیاز فعال کردهاید، باید تنظیمات را برای اجازه دادن به ترافیک HTTPS تنظیم کنید. خوشبختانه، Nginx پس از نصب چند پروفایل را با UFW ثبت میکند.
با تایپ دستور زیر میتوانید تنظیمات فعلی را ببینید:
احتمالاً شبیه به این است، به این معنی که فقط ترافیک HTTP به وبسرور اجازه داده میشود:
برای اجازه دادن به ترافیک HTTPS، پروفایل Nginx Full را مجاز کرده و پروفایل اضافی Nginx HTTP را حذف کنید:
وضعیت شما اکنون باید شبیه به این باشد:
مرحله ۴ — دریافت گواهینامه SSL با Let’s Encrypt
Certbot روشهای مختلفی برای دریافت گواهینامههای SSL از طریق پلاگینها ارائه میدهد. پلاگین Nginx وظیفه پیکربندی مجدد Nginx و ریلود کردن تنظیمات را هر زمان که لازم باشد بر عهده میگیرد. برای استفاده از این پلاگین، دستور زیر را تایپ کنید:
این دستور Certbot را با پلاگین --nginx اجرا میکند و با استفاده از -d نام دامنههایی را که میخواهید گواهینامه برای آنها معتبر باشد مشخص میکند.
اگر این اولین باری است که Certbot را اجرا میکنید، از شما خواسته میشود یک آدرس ایمیل وارد کرده و با شرایط خدمات موافقت کنید. پس از انجام این کار، Certbot با سرور Let’s Encrypt ارتباط برقرار میکند و سپس یک چالش (Challenge) را اجرا میکند تا تایید کند شما دامنهای را که برای آن گواهینامه درخواست میکنید کنترل میکنید.
اگر موفقیتآمیز باشد، Certbot میپرسد که میخواهید تنظیمات HTTPS خود را چگونه پیکربندی کنید:
گزینه خود را انتخاب کرده و ENTER را فشار دهید. پیکربندی بهروزرسانی شده و Nginx برای اعمال تنظیمات جدید ریلود میشود. Certbot با پیامی کار را به پایان میرساند که به شما میگوید فرآیند موفقیتآمیز بوده و گواهینامههای شما کجا ذخیره شدهاند:
بهطور پیشفرض، Certbot گواهینامهها را در مسیر /etc/letsencrypt/live/ ذخیره میکند و بلاک سرور Nginx شما را بهروزرسانی میکند تا از فایلهای fullchain.pem و privkey.pem استفاده کند.
میتوانید پیکربندی را با اجرای دستور زیر تایید کنید:
این دستور دستورالعملهای SSL در حال استفاده توسط Nginx را نمایش میدهد.
نحوه بهروزرسانی پیکربندی Nginx توسط Certbot هنگامی که Certbot را با فلگ --nginx اجرا میکنید، پیکربندی Nginx شما را تحلیل میکند تا بلاکهای سروری که با دامنههای ارائهشده مطابقت دارند را پیدا کند. سپس Certbot بهطور خودکار این بلاکهای سرور را با درج دستورالعملهای مورد نیاز HTTPS برای فعالسازی SSL/TLS تغییر میدهد. اگر گزینه ریدایرکت HTTP به HTTPS را انتخاب کنید، Certbot همچنین Nginx را پیکربندی میکند تا تمام درخواستهای HTTP را به HTTPS هدایت کند.
برای مثال، یک بلاک سرور معمولی قبل از اجرای Certbot ممکن است به این شکل باشد:
پس از اجرای Certbot با گزینه ریدایرکت، به شکل زیر تغییر میکند:
میتوانید دستور زیر را برای اعمال HSTS اضافه کنید:
گواهینامههای شما دانلود، نصب و بارگذاری شدهاند. سعی کنید وبسایت خود را با https:// بازگذاری کنید و به نشانگر امنیتی مرورگر خود توجه کنید. باید نشان دهد که سایت بهدرستی ایمن شده است (معمولاً با یک آیکون قفل).
رفع مشکلات خطاهای Let’s Encrypt / Certbot
حتی با استفاده از پلاگین Nginx، ممکن است هنگام صدور یا تمدید گواهینامهها با خطاهایی مواجه شوید. در اینجا مشکلات رایج و نحوه رفع آنها آورده شده است:
- برخورد با محدودیتهای نرخ (Rate Limits): Let’s Encrypt محدودیتهایی برای تعداد گواهینامههای صادر شده برای هر دامنه در هر هفته اعمال میکند. اگر به این محدودیت برخوردید، برای تست از محیط Staging استفاده کنید:
bashsudo certbot –nginx –staging -d example.com -d www.example.com
- تاخیر در انتشار DNS: تغییرات DNS ممکن است زمان ببرد. اگر Certbot نمیتواند دامنه شما را اعتبارسنجی کند، رکوردهای خود را بررسی کنید:
bashdig +short example.com
- دسترسی به پورت 80/443: اطمینان حاصل کنید که هیچ فایروالی این پورتها را مسدود نکرده است:
bashsudo ufw allow 80sudo ufw allow 443
- بلاک سرور اشتباه: اگر بلاک سرور اشتباهی به چالش ACME پاسخ دهد، اعتبارسنجی Certbot ناموفق خواهد بود.
انتخاب نوع چالش: HTTP-01 در برابر DNS-01
چالش ACME را که با تنظیمات و محدودیتهای شما مطابقت دارد انتخاب کنید:
- چه زمانی از HTTP-01 استفاده کنیم؟
- شما سرور پاسخدهنده روی پورت ۸۰ را کنترل میکنید.
- شما گواهینامهای برای نامهای میزبان خاص میخواهید.
- مثال:
sudo certbot --nginx -d example.com -d www.example.com
- چه زمانی از DNS-01 استفاده کنیم؟
- به گواهینامه وایلدکارت (
*.example.com) نیاز دارید. - پشت CDN/پروکسی هستید و پورت ۸۰ را در دسترس ندارید.
- مثال (دستی برای وایلدکارت):
bashsudo certbot certonly –manual –preferred-challenges dns \-d example.com -d ‘*.example.com’
- به گواهینامه وایلدکارت (
مرحله ۵ — بررسی تمدید خودکار Certbot
گواهینامههای Let’s Encrypt فقط نود روز اعتبار دارند. پکیج Certbot که نصب کردهاید با اضافه کردن یک تایمر systemd که روزی دو بار اجرا میشود و هر گواهینامهای که سی روز تا انقضای آن باقی مانده باشد را بهطور خودکار تمدید میکند، این کار را برای شما انجام میدهد.
میتوانید وضعیت تایمر را با systemctl بررسی کنید:
برای تست فرآیند تمدید، میتوانید یک اجرای آزمایشی (Dry Run) با Certbot انجام دهید:
اگر خطایی ندیدید، همه چیز آماده است. در صورت لزوم، Certbot گواهینامههای شما را تمدید کرده و Nginx را ریلود میکند. اگر فرآیند تمدید خودکار هرگز ناموفق باشد، Let’s Encrypt پیامی به ایمیلی که مشخص کردهاید ارسال میکند.
سوالات متداول
۱. آیا Let’s Encrypt واقعاً رایگان است؟ بله! Let’s Encrypt یک مرجع صدور گواهی عمومی است که گواهینامههای رایگان SSL/TLS را که توسط تمام مرورگرهای اصلی معتبر هستند، ارائه میدهد. هیچ هزینهای برای صدور یا تمدید دریافت نمیشود.
۲. گواهینامههای Let’s Encrypt چقدر اعتبار دارند؟ گواهینامههای Let’s Encrypt ۹۰ روز اعتبار دارند. این عمر کوتاه، اتوماسیون را تشویق میکند و در صورت لو رفتن کلید خصوصی، ریسک را محدود میکند.
۳. آیا میتوانم چندین دامنه یا سابدامین را ایمن کنم؟ بله. میتوانید از چندین فلگ -d با Certbot برای ایجاد یک گواهینامه SAN برای چندین دامنه استفاده کنید. برای دامنههای وایلدکارت، از چالش DNS-01 استفاده کنید.
۴. اگر Certbot نتواند برای اعتبارسنجی به دامنه من دسترسی پیدا کند چه باید کرد؟ ابتدا انتشار DNS را با dig example.com بررسی کنید. مطمئن شوید پورتهای 80 و 443 باز هستند. تایید کنید که دستورالعمل server_name در Nginx با دامنه مطابقت دارد. اگر پشت CDN هستید، از چالش DNS-01 استفاده کنید.
۵. چگونه تمدید گواهینامه را خودکارسازی کنم؟ Certbot یک تایمر systemd را در اوبونتو نصب میکند که روزی دو بار برای بررسی و تمدید گواهینامهها اجرا میشود. نیازی به مداخله دستی نیست.
۶. آیا Nginx پس از تمدید گواهینامه بهطور خودکار ریلود میشود؟ بله. Certbot طوری پیکربندی شده است که پس از تمدید موفقیتآمیز، Nginx را بهطور خودکار ریلود کند.
نتیجهگیری
در این آموزش، شما Nginx را در اوبونتو با گواهینامههای رایگان SSL از Let’s Encrypt ایمن کردید. شما Certbot را نصب کردید، HTTPS را پیکربندی نمودید، HSTS را فعال کرده و تمدیدهای خودکار را بررسی کردکردید.
سایت شما اکنون با SSL رایگان در حال اجراست، HTTPS در آن اجباری است، HSTS فعال شده و گواهینامهها بهطور خودکار تمدید میشوند.




