اگر روی سرور Nginx دارید، لازم نیست سرویس را متوقف کنید یا فایل های پیکربندی را دستی ویرایش کنید. افزونه اختصاصی Certbot خودش بلاک مربوط به دامنه شما را پیدا میکند، گواهی را میگیرد و تنظیمات لازم را اضافه میکند. کل فرایند بدون قطعی انجام میشود و در پایان، ریدایرکت از HTTP به HTTPS هم برقرار است.
تفاوت این روش با حالت standalone
در حالت standalone، خود Certbot یک وب سرور موقت بالا می آورد و به همین دلیل باید Nginx متوقف شود. اینجا برعکس است: افزونه از همان Nginx در حال اجرا برای اعتبارسنجی استفاده میکند، پس هیچ قطعی سرویسی رخ نمیدهد.
مزیت دوم این است که کار پیکربندی را هم انجام میدهد. مسیر گواهی، تنظیمات TLS و در صورت تمایل ریدایرکت به HTTPS را خودش به فایل شما اضافه میکند. اگر ترجیح میدهید هیچ ابزاری به فایل های پیکربندی شما دست نزند، همان حالت standalone انتخاب بهتری است.
پیشنیازها
قبل از شروع، این موارد باید آماده باشند. تقریبا تمام خطاهای این فرایند از یکی از همین ها می آید و بررسی آنها چند ثانیه بیشتر طول نمیکشد.
dig +short example.com
dig +short www.example.comsudo nginx -t
sudo systemctl status nginx- دامنه و زیردامنه ها باید به آی پی همین سرور اشاره کنند.
- پورت های ۸۰ و ۴۴۳ باید از بیرون قابل دسترسی باشند.
- یک بلاک server با دامنه شما باید از قبل وجود داشته باشد.
نصب Certbot و افزونه Nginx
افزونه در بسته جداگانه ای قرار دارد و باید همراه Certbot نصب شود. روی نسخه های امروزی اوبونتو و دبیان، نصب از مخزن رسمی کاملا کافی است.
اگر هنوز روی اوبونتو ۲۰.۰۴ هستید توجه داشته باشید که دوره پشتیبانی استاندارد آن به پایان رسیده است. برای سروری که ترافیک واقعی دارد، ارتقا به نسخه های جدیدتر ارزشش را دارد.
sudo apt update
sudo apt install certbot python3-certbot-nginxنکته کلیدی: مقدار server_name باید درست باشد
این رایج ترین دلیل شکست این روش است. افزونه برای اینکه بفهمد کدام بلاک را ویرایش کند، دنبال دامنه شما در دستور server_name میگردد. اگر این مقدار خالی باشد، به شکل زیرخط تعریف شده باشد یا با دامنه ای که در دستور Certbot میدهید یکی نباشد، افزونه بلاک را پیدا نمیکند و کار متوقف میشود.
پس اول فایل پیکربندی سایت را باز کنید و مطمئن شوید تمام دامنه هایی که میخواهید در گواهی باشند، دقیقا همانجا نوشته شده اند.
sudo nano /etc/nginx/sites-available/example.comserver_name example.com www.example.com;sudo nginx -t
sudo systemctl reload nginxتنظیم فایروال
اگر UFW فعال است، پروفایل کامل Nginx را باز کنید تا هر دو پورت ۸۰ و ۴۴۳ اجازه عبور داشته باشند. اگر قبلا فقط پروفایل HTTP را باز کرده بودید، آن قانون اضافی را حذف کنید تا فهرست تمیز بماند.
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw statusگرفتن و نصب گواهی
حالا دستور اصلی را اجرا کنید. Certbot ایمیل و پذیرش شرایط را میپرسد و در پایان از شما میپرسد که آیا ریدایرکت خودکار از HTTP به HTTPS اضافه شود یا نه. در تقریبا تمام موارد گزینه ریدایرکت انتخاب درستی است.
بعد از اتمام، فایل پیکربندی شما تغییر کرده و بلاک جدیدی برای پورت ۴۴۳ به آن اضافه شده است.
sudo certbot --nginx -d example.com -d www.example.comsudo certbot certonly --nginx -d example.com -d www.example.comsudo certbot certificatesتمدید خودکار و آزمایش آن
گواهی ها نود روز اعتبار دارند و بسته Certbot خودش یک تایمر سیستمی برای تمدید نصب میکند. نیازی به ساختن کرون جاب دستی نیست؛ فقط یک بار مطمئن شوید که این تایمر فعال است.
آزمایش تمدید را حتما یک بار انجام دهید. اگر این دستور بدون خطا تمام شد، یعنی نود روز بعد هم بدون دخالت شما کار خواهد کرد.
systemctl list-timers | grep certbotsudo certbot renew --dry-runیک هشدار درباره ویرایش فایل تنظیمات TLS
افزونه یک فایل با تنظیمات پیشنهادی TLS میسازد و آن را در پیکربندی شما فراخوانی میکند. وسوسه میشوید که برای سخت گیرانه تر کردن تنظیمات، مستقیم همان فایل را ویرایش کنید. این کار را نکنید؛ در به روز رسانی های بعدی Certbot این فایل بازنویسی میشود و تغییرات شما از بین میرود.
هر تنظیم اضافه ای را در بلاک server خودتان بنویسید تا پایدار بماند. اگر HSTS را فعال میکنید، توجه داشته باشید که مرورگرها آن را برای مدت تعیین شده به خاطر میسپارند؛ اگر بعدا مشکلی در گواهی پیش بیاید، کاربران تا پایان آن مدت نمیتوانند سایت را باز کنند. با مقدار کوتاه شروع کنید.
/etc/letsencrypt/options-ssl-nginx.confadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;- بعد از هر تغییر، پیکربندی را با nginx -t تست کنید.
- اگر Nginx جلوی Apache است، گواهی را فقط روی Nginx نصب کنید.
- برای گواهی وایلدکارت این افزونه کافی نیست و باید از اعتبارسنجی DNS استفاده کنید.
پرسش های پرتکرار
چرا Certbot بلاک مربوط به دامنه من را پیدا نمیکند؟
افزونه بر اساس مقدار server_name بلاک را پیدا میکند. اگر این مقدار خالی باشد یا با دامنه ای که در دستور میدهید یکی نباشد، عملیات متوقف میشود.
آیا میتوان بدون تغییر پیکربندی فقط گواهی گرفت؟
بله. با استفاده از certonly همراه افزونه، Certbot فقط گواهی را دریافت میکند و فایل های پیکربندی شما را ویرایش نمیکند.
چرا تنظیمات TLS من بعد از به روز رسانی از بین رفت؟
فایل options-ssl-nginx.conf در به روز رسانی های Certbot بازنویسی میشود. تنظیمات اختصاصی را در بلاک server خودتان بنویسید تا پایدار بماند.
به راهنمای بیشتری نیاز دارید؟
تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.