راهاندازی سایت با Nginx و گواهی SSL رایگان در اوبونتو
در این آموزش یک سایت HTML ساده روی Nginx راهاندازی و با Certbot برای آن HTTPS فعال میکنیم. مثال برای اوبونتوی تازه است؛ روی سروری که وبسایت واقعی یا کنترلپنل دارد، فایلهای سایت و تنظیمات موجود را جایگزین نکنید. نصب PHP یا وردپرس موضوع این مقاله نیست.
۱. دامنه و شبکه را آماده کنید
دامنه باید متعلق به شما باشد. رکورد A آن را به IPv4 سرور و فقط در صورت وجود IPv6 درست، رکورد AAAA را به IPv6 متصل کنید. پورتهای TCP 80 و 443 باید در فایروال سیستم و پنل مجاز باشند. دسترسی SSH را حفظ کنید؛ مراحل در آموزش UFW آمده است.
در همهٔ مثالها example.com نام نمونه است؛ آن را با دامنهٔ خود جایگزین کنید. برای صدور گواهی به دامنهٔ نمونه درخواست نفرستید. اگر CDN دارید، مسیر اعتبارسنجی و تنظیم TLS آن را هم بررسی کنید.
۲. نصب Nginx و ساخت صفحه
sudo apt update
sudo apt install nginx
sudo systemctl status nginx --no-pager
sudo mkdir -p /var/www/example.com/html
sudo nano /var/www/example.com/html/index.html
در فایل، این صفحهٔ ساده را ذخیره کنید:
<!doctype html>
<html lang="fa" dir="rtl">
<meta charset="utf-8">
<title>سایت من</title>
<h1>سایت آزمایشی آماده است</h1>
</html>
فایل باید برای Nginx قابل خواندن باشد؛ برای رفع خطای مجوز، همهٔ مسیرها را 777 نکنید. مالکیت و مجوز مناسب همان پروژه را تعیین کنید.
۳. تنظیم سایت
فایل جدید /etc/nginx/sites-available/example.com را با sudo nano باز کنید و محتوای زیر را بگذارید. اگر فایلی با این نام دارید، ابتدا آن را بخوانید و نسخهٔ پشتیبان بگیرید:
server {
listen 80;
server_name example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
اگر عمداً سایت را روی IPv6 هم ارائه میکنید، listen [::]:80 را به همین بلوک اضافه کنید و دسترسی IPv6 را آزمایش کنید. سپس فقط اگر لینک مقصد از قبل وجود ندارد:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t
اگر تست موفق بود، تنظیم را بارگذاری کنید:
sudo systemctl reload nginx
curl -I -H "Host: example.com" http://127.0.0.1/
سایت را از مرورگر با http:// و دامنهٔ واقعی باز کنید. پاسخ سایت پیشفرض میتواند نشاندهندهٔ اشتباه server_name یا دامنه باشد؛ برای رفع آن، همهٔ تنظیمات دیگر را حذف نکنید.
۴. نصب Certbot و دریافت گواهی
روش این بخش snap رسمی Certbot است. ابتدا snapd و پشتیبانی classic باید آماده باشند. اگر Certbot با روش دیگری نصب شده، طبق مستند رسمی یک روش نصب واحد انتخاب کنید و نسخههای موازی نسازید. برای نصب تازه:
sudo snap install --classic certbot
sudo /snap/bin/certbot --nginx -d example.com
دستور دوم فقط با دامنهٔ واقعی و پس از دسترسی عمومی HTTP اجرا شود. ایمیل معتبر بدهید، شرایط سرویس را بخوانید و تصمیم مربوط به هدایت HTTP به HTTPS را آگاهانه انتخاب کنید. Certbot میتواند تنظیم Nginx را ویرایش کند؛ قبل از آن نسخهٔ پشتیبان داشته باشید.
۵. بررسی HTTPS و تمدید
sudo nginx -t
curl -I https://example.com/
sudo /snap/bin/certbot certificates
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all
در مرورگر دامنه و گواهی را بررسی کنید. dry-run آزمون تمدید است و جای پایش تاریخ انقضا را نمیگیرد. نصب Certbot معمولاً زمانبندی تمدید دارد؛ وجود و اجرای آن را کنترل کنید. مسیر اعتبارسنجی مورد استفاده باید در تمدیدهای بعد هم قابل دسترس بماند.
۶. خطاهای رایج
Timeout اعتبارسنجی: رکورد دامنه، مسیر شبکه و پورت 80 را بررسی کنید. AAAA اشتباه: وجود IPv6 نادرست میتواند اعتبارسنجی را مختل کند. 404: root، نام فایل و server_name را بررسی کنید. 502: اگر reverse proxy دارید، برنامهٔ پشت آن را بررسی کنید. خطای گواهی: نام دامنه، تاریخ اعتبار و ساعت سیستم را ببینید؛ هشدار را دور نزنید.
sudo tail -n 50 /var/log/nginx/error.log
sudo journalctl -u nginx --since "15 minutes ago" --no-pager
HTTPS ارتباط را رمزگذاری میکند، اما بهتنهایی امنیت برنامه، بکاپ و مدیریت دسترسی را تأمین نمیکند. برای پیگیری مشکل شبکه راهنمای عیبیابی و برای محافظت داده آموزش بکاپ را بخوانید.
منابع و ادامهٔ یادگیری
مبنای مثالهای سرور، اوبونتو ۲۴٫۰۴ LTS است؛ نام سرویسها و روش نصب در توزیعهای دیگر ممکن است متفاوت باشد. تصویر مقاله مفهومی است. این دستورها هنگام تهیهٔ مقاله روی سرویس واقعی مشتری اجرا نشدهاند.
منابع رسمی: راهنمای Nginx، دستورالعمل رسمی Certbot
برای انتخاب زیرساخت، سرورهای لینوکس و چکلیست خرید VPS را ببینید. آموزشهای مکمل در مرکز آموزش پرشین کلود در دسترساند.