راهاندازی سایت روی سرور مجازی با Nginx و SSL رایگان
دامنه را به سرور مجازی وصل کنید، Nginx را نصب کنید، سایت را بالا بیاورید و با Certbot گواهی SSL رایگان Let's Encrypt بگیرید. آموزش گامبهگام برای Ubuntu 24.04.
داشتن سرور مجازی (VPS) اختصاصی نسبت به هاست اشتراکی آزادی عمل بسیار بیشتری به شما میدهد: خودتان تصمیم میگیرید چه نرمافزاری اجرا شود، کش چطور کار کند و گواهیها چگونه تمدید شوند. در این آموزش قدمبهقدم نصب Nginx روی Ubuntu 24.04، راهاندازی اولین سایت و دریافت گواهی SSL رایگان Let's Encrypt با Certbot را توضیح میدهیم. در پایان، سایتی خواهید داشت که روی HTTPS باز میشود و گواهیاش را خودکار تمدید میکند.
در همهٔ مثالها از دامنهٔ example.com استفاده شده است؛ آن را با دامنهٔ خودتان جایگزین کنید. فرض میکنیم با کاربری که دسترسی sudo دارد وارد سرور شدهاید.
پیشنیازها
- یک سرور مجازی با Ubuntu 24.04 و دسترسی SSH (اگر با SSH آشنا نیستید، مقالهٔ SSH چیست را بخوانید).
- یک دامنه و دسترسی به تنظیمات DNS آن.
- آدرس IP عمومی سرور.
گام ۱: رکوردهای DNS را به سرور اشاره دهید
Let's Encrypt برای تأیید مالکیت دامنه از طریق HTTP به آن وصل میشود؛ پس دامنه باید پیش از درخواست گواهی به سرور شما اشاره کند. در پنل DNS این رکوردها را بسازید:
| نوع | نام | مقدار |
|---|---|---|
| A | @ | آدرس IPv4 سرور |
| A | www | آدرس IPv4 سرور |
| AAAA | @ و www | آدرس IPv6 (در صورت وجود) |
برای آشنایی با سازوکار DNS، مقالهٔ DNS چیست را ببینید. برای بررسی اعمال شدن رکوردها:
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA
اگر IP سرورتان را دیدید، میتوانید ادامه دهید. خروجی خالی یا IP قدیمی یعنی باید کمی صبر کنید. نکتهٔ مهم: اگر سرور آن آدرس IPv6 را ندارد یا Nginx روی IPv6 گوش نمیدهد، رکورد AAAA اضافه نکنید؛ وگرنه ممکن است اعتبارسنجی به آدرس اشتباه برود.
گام ۲: نصب Nginx
فهرست بستهها را بهروز کنید و Nginx را نصب کنید:
sudo apt update
sudo apt install -y nginx
سرویس بهطور خودکار اجرا میشود. وضعیتش را بررسی کنید:
systemctl status nginx --no-pager
اگر active (running) را دیدید، با باز کردن http://SERVER_IP در مرورگر باید صفحهٔ پیشفرض Nginx نمایش داده شود.
گام ۳: باز کردن HTTP و HTTPS در فایروال
اگر از UFW استفاده میکنید، پورتهای 80 و 443 را باز کنید و دسترسی SSH را حفظ کنید:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
پروفایل Nginx Full هر دو پورت 80/tcp و 443/tcp را باز میکند. هرگز بدون قانون OpenSSH فایروال را فعال نکنید؛ ممکن است دسترسیتان به سرور قطع شود. سایر نکات پایهای امنیت را در چکلیست امنیت سرور لینوکس آوردهایم.
گام ۴: ساخت پوشهٔ سایت
یک پوشهٔ جدا برای هر سایت، میزبانی چند سایت روی یک سرور را در آینده سادهتر میکند:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo '<h1>example.com is live</h1>' > /var/www/example.com/html/index.html
بعداً میتوانید فایلهای اصلی سایت را با scp، rsync یا Git به این پوشه منتقل کنید.
گام ۵: پیکربندی server block در Nginx
در Nginx هر سایت با یک «server block» تعریف میشود. فایل پیکربندی جدیدی بسازید:
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;
location / {
try_files $uri $uri/ =404;
}
}
با یک لینک نمادین آن را فعال کنید. اگر به سایت پیشفرض نیازی ندارید، غیرفعالش کنید:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
بعد از هر تغییر، اول پیکربندی را تست و سپس بارگذاری مجدد کنید:
sudo nginx -t
sudo systemctl reload nginx
تا پیامهای syntax is ok و test is successful را ندیدهاید، reload نکنید. اکنون باید صفحهٔ خودتان در http://example.com باز شود.
گام ۶: دریافت SSL رایگان Let's Encrypt با Certbot
Let's Encrypt یک مرجع صدور گواهی است که گواهیهای رایگان با اعتبار ۹۰ روزه صادر میکند. اگر میخواهید بدانید SSL دقیقاً چه کاری انجام میدهد، مقالهٔ گواهی SSL چیست را بخوانید. Certbot و افزونهٔ Nginx آن را از مخازن Ubuntu نصب کنید:
sudo apt install -y certbot python3-certbot-nginx
نکته: توسعهدهندگان Certbot برای جدیدترین نسخه، بستهٔ snap را پیشنهاد میکنند (
sudo snap install --classic certbot). نسخهٔ مخزن Ubuntu برای بیشتر کاربردها کافی است؛ فقط یکی از این دو را نصب کنید.
گواهی را دریافت کنید:
sudo certbot --nginx -d example.com -d www.example.com
در اولین اجرا، Certbot ایمیل شما و پذیرش شرایط استفاده را میخواهد. سپس دامنه را تأیید میکند، گواهی را میگیرد و دستورهای listen 443 ssl را به server block اضافه میکند. نسخههای جدید Certbot ریدایرکت HTTP به HTTPS را هم خودکار اضافه میکنند؛ نسخههای قدیمیتر سؤال میپرسند که باید گزینهٔ «redirect» را انتخاب کنید.
نتیجه را بررسی کنید:
curl -I http://example.com
curl -I https://example.com
دستور اول باید 301 Moved Permanently و انتقال به HTTPS، و دستور دوم 200 OK برگرداند.
گام ۷: اطمینان از تمدید خودکار
Certbot یک تایمر systemd میسازد که گواهیها را پیش از انقضا تمدید میکند. تایمر را ببینید و یک تمدید آزمایشی اجرا کنید:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
در نسخهٔ snap، نام تایمر snap.certbot.renew.timer است. اگر اجرای آزمایشی بدون خطا بود، کار دیگری لازم نیست.
نکتهٔ تکمیلی: Nginx بهعنوان reverse proxy
اگر برنامهٔ Node.js، Python یا یک کانتینر Docker روی پورت 3000 دارید، Nginx را جلوی آن قرار دهید تا SSL روی Nginx مدیریت شود. بخش location / را اینطور تغییر دهید:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
هدرهای Upgrade و Connection برای برنامههایی که از WebSocket استفاده میکنند لازماند. برنامه را فقط روی 127.0.0.1 اجرا کنید تا پورت 3000 از بیرون بسته بماند. اگر تازه با کانتینرها آشنا میشوید، آموزش نصب Docker را ببینید.
خطاهای رایج
Certbot پیام «Timeout during connect» یا «Connection refused» میدهد. پورت 80 از بیرون در دسترس نیست. فایروال را با sudo ufw status و گوش دادن Nginx را با sudo ss -tlnp | grep :80 بررسی کنید.
خطای «NXDOMAIN» یا IP اشتباه. DNS هنوز اعمال نشده یا اشتباه تنظیم شده است. دوباره dig +short را اجرا کنید و اگر رکورد AAAA به IPv6 اشتباهی اشاره میکند، حذفش کنید.
پیام «too many certificates already issued». به محدودیت نرخ Let's Encrypt برخوردهاید. آزمایشها را با --dry-run یا --staging انجام دهید و تا رفع محدودیت صبر کنید.
502 Bad Gateway. در حالت reverse proxy، برنامهٔ پشتی اجرا نشده یا روی پورت دیگری است. آن را مستقیم با curl http://127.0.0.1:3000 تست کنید و خروجی sudo tail -n 50 /var/log/nginx/error.log را ببینید.
سایت بعد از ویرایش باز نمیشود. دستور sudo nginx -t را اجرا کنید؛ پیام خطا معمولاً نام فایل و شمارهٔ خط را نشان میدهد.
سوالات متداول
آیا گواهی Let's Encrypt واقعاً رایگان است؟
بله. Let's Encrypt گواهیهای با اعتبارسنجی دامنه (DV) را رایگان صادر میکند. اعتبار آنها ۹۰ روز است، اما Certbot خودکار تمدیدشان میکند و مرورگرها به همان اندازهٔ گواهیهای DV پولی به آنها اعتماد دارند.
آیا میتوانم چند سایت روی یک سرور مجازی داشته باشم؟
بله. برای هر سایت یک پوشهٔ جدا در /var/www و یک server block جدا در /etc/nginx/sites-available بسازید و برای هر کدام certbot --nginx -d yourdomain را اجرا کنید. محدودیت فقط RAM و پردازندهٔ سرور است.
چرا Nginx و نه Apache؟
Nginx فایلهای استاتیک و تعداد زیادی اتصال همزمان را با مصرف حافظهٔ کم سرویس میدهد و رایجترین reverse proxy است؛ این مزیت روی یک VPS کوچک کاملاً محسوس است. اگر برنامهٔ شما به قوانین .htaccess وابسته است، Apache همچنان گزینهٔ خوبی است.
سایت خود را روی سرور مجازی ترکیه راهاندازی کنید
همهٔ مراحل این آموزش حتی روی کوچکترین پلنها هم بهراحتی اجرا میشود. سرور مجازی ترکیه TürkiyeVPS در استانبول از ماهانه $0.89 شروع میشود و با Ubuntu 24.04 یا Debian 12، دسترسی کامل root و ترافیک نامحدود ارائه میشود؛ سرور بلافاصله پس از تأیید پرداخت بهصورت خودکار ساخته میشود و پرداخت با تتر (USDT شبکهٔ TRC20) انجام میشود. برای سایتهای پربازدیدتر، پلنهای VDS با vCPU اختصاصی را ببینید. اگر در مرحلهای گیر کردید، از طریق چت آنلاین سایت یا ثبت تیکت پشتیبانی با ما در تماس باشید.
اینها را هم بخوانید
اگر برنامهها روی VPS با رم ۵۱۲ مگابایت یا ۱ گیگابایت مدام بسته میشوند، swap اولین کمک است. افزودن swap در او...
ربات شما نباید با خاموش شدن لپتاپ از کار بیفتد. آموزش قدمبهقدم اجرای ربات تلگرام پایتون بهصورت ۲۴ ساعته رو...
میخواهید سرور Metin2 راه بیندازید اما نمیدانید VPS کافی است یا VDS لازم دارید؟ پردازندهٔ اشتراکی و اختصاصی،...