TürkiyeVPS

راه‌اندازی سایت روی سرور مجازی با Nginx و SSL رایگان

دامنه را به سرور مجازی وصل کنید، Nginx را نصب کنید، سایت را بالا بیاورید و با Certbot گواهی SSL رایگان Let's Encrypt بگیرید. آموزش گام‌به‌گام برای Ubuntu 24.04.

7 دقیقه مطالعه

داشتن سرور مجازی (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 اختصاصی را ببینید. اگر در مرحله‌ای گیر کردید، از طریق چت آنلاین سایت یا ثبت تیکت پشتیبانی با ما در تماس باشید.