وب‌سرور

راه‌اندازی وب‌سایت روی اوبونتو با Nginx در ۱۰ دقیقه

از سرور خامِ اوبونتو تا وب‌سایتی که با قفل سبز HTTPS بالا آمده، واقعاً ده دقیقه راه است — اگر ترتیب درست قدم‌ها را بدانید. در این آموزش دقیقاً همان ترتیب را با هم می‌رویم: Nginx، دامنه، گواهی رایگان SSL و چند بهینه‌سازی که از روز اول تفاوت می‌سازد.

پیش‌نیازها

قدم ۱: نصب Nginx

apt update && apt install nginx -y
systemctl enable --now nginx

همین حالا اگر آی‌پی سرور را در مرورگر باز کنید، صفحه‌ی «Welcome to nginx» را می‌بینید — وب‌سرور شما زنده است. اگر فایروال UFW فعال دارید، وب را باز کنید:

ufw allow 'Nginx Full'

قدم ۲: پوشه و صفحه‌ی سایت

mkdir -p /var/www/example.ir/html
echo '<h1>سلام دنیا! 🚀</h1>' > /var/www/example.ir/html/index.html

به‌جای example.ir دامنه‌ی خودتان را بگذارید (در همه‌ی ادامه‌ی آموزش هم همین‌طور).

قدم ۳: تعریف سایت در Nginx

فایل /etc/nginx/sites-available/example.ir را بسازید:

server {
    listen 80;
    server_name example.ir www.example.ir;
    root /var/www/example.ir/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

فعال‌سازی و بارگذاری مجدد:

ln -s /etc/nginx/sites-available/example.ir /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

nginx -t را به عادت تبدیل کنید — پیکربندی خراب را قبل از اعمال لو می‌دهد، نه بعدش.

قدم ۴: HTTPS رایگان با Let's Encrypt

apt install certbot python3-certbot-nginx -y
certbot --nginx -d example.ir -d www.example.ir

Certbot خودش گواهی می‌گیرد، تنظیمات Nginx را ویرایش می‌کند و ریدایرکت HTTP→HTTPS را می‌سازد. تمدید هم خودکار است؛ با این دستور مطمئن شوید:

certbot renew --dry-run
💡 نکته: برای موفق‌شدن Certbot، دامنه باید از قبل به آی‌پی سرور resolve شود. اگر رکورد A را تازه ساخته‌اید، چند دقیقه صبر کنید.

قدم ۵ (اختیاری): PHP برای سایت‌های داینامیک

apt install php8.3-fpm -y

و داخل بلوک server این را اضافه کنید:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

بعد nginx -t && systemctl reload nginx. حالا وردپرس، لاراول یا هر اپ PHP دیگری قابل نصب است.

سه بهینه‌سازی کوچک با اثر بزرگ

فشرده‌سازی gzip

در /etc/nginx/nginx.conf معمولاً فعال است؛ مطمئن شوید این خط‌ها از کامنت درآمده‌اند:

gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;

حجم صفحه‌ها تا ۷۰٪ کم می‌شود — هم سرعت، هم صرفه‌جویی در ترافیکِ صورتحساب ساعتی.

کش فایل‌های استاتیک

location ~* \.(css|js|png|jpg|svg|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

هدرهای امنیتی

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header Referrer-Policy strict-origin-when-cross-origin;

عیب‌یابی سریع

علامتاولین جای نگاه
502 Bad Gatewayسرویس PHP-FPM خاموش است: systemctl status php8.3-fpm
403 Forbiddenمالکیت/مجوز پوشه: chown -R www-data:www-data /var/www
صفحه‌ی پیش‌فرض Nginxلینک sites-enabled یا server_name اشتباه است
تغییرات اعمال نمی‌شودnginx -t و بعد systemctl reload nginx یادتان رفته

تمام شد — سایت بالاست

الان یک وب‌سرور واقعی با HTTPS خودکار دارید که برای وردپرس، فروشگاه یا API آماده است. قدم منطقی بعدی، اجرای چک‌لیست امنیت سرور است؛ و اگر اهل کانتینر هستید، داکر را روی همین سرور امتحان کنید.

آموزش‌های مرتبط

آماده‌ی تمرین عملی هستی؟

سرور ابری ساعتی مهران هاست در ۶۰ ثانیه تحویل می‌شود — تمرین کن، و فقط بابت همان ساعت‌ها پرداخت کن.