از سرور خامِ اوبونتو تا وبسایتی که با قفل سبز HTTPS بالا آمده، واقعاً ده دقیقه راه است — اگر ترتیب درست قدمها را بدانید. در این آموزش دقیقاً همان ترتیب را با هم میرویم: Nginx، دامنه، گواهی رایگان SSL و چند بهینهسازی که از روز اول تفاوت میسازد.
پیشنیازها
- یک سرور اوبونتو (۲۲.۰۴ یا ۲۴.۰۴) — اگر ندارید، در یک دقیقه بسازید؛
- دسترسی SSH (راهنمای کامل: اتصال به سرور با SSH)؛
- یک دامنه که رکورد A آن به آیپی سرور اشاره کند (نمیدانید چطور؟ آموزش رکوردهای DNS).
قدم ۱: نصب 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
قدم ۵ (اختیاری): 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 آماده است. قدم منطقی بعدی، اجرای چکلیست امنیت سرور است؛ و اگر اهل کانتینر هستید، داکر را روی همین سرور امتحان کنید.