نصب nginx و کانفیگ پایه برای یک سایت استاتیک

ساده‌ترین کاربرد nginx سرو کردن یک سایت HTML و فایل‌های استاتیک است. در این راهنما از نصب تا اولین سایت روی دامنه را قدم‌به‌قدم می‌بینید؛ الگوی همین ساختار (sites-available و sites-enabled) برای همهٔ سایت‌های بعدی هم استفاده می‌شود.

وب‌سرور و SSLمقدماتی10 دقیقه

۱نصب nginx

بسته‌های سیستم را به‌روز کنید و nginx را نصب کنید. سرویس به‌صورت خودکار اجرا و برای بوت بعدی فعال می‌شود.

bash
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager

۲باز کردن پورت‌های وب در فایروال

اگر ufw فعال است پورت‌های ۸۰ و ۴۴۳ را باز کنید. قبل از فعال کردن ufw حتماً پورت SSH را باز کنید تا دسترسی‌تان قطع نشود.

bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw status

بعد از این مرحله با مرورگر آدرس IP سرور را باز کنید؛ صفحهٔ «Welcome to nginx» باید دیده شود.

۳ساخت پوشهٔ سایت و یک صفحهٔ آزمایشی

هر سایت را در پوشهٔ جدا بگذارید. مالک پوشه را کاربر خودتان یا www-data قرار دهید.

bash
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www/example.com
echo '<h1>Hello from nginx</h1>' > /var/www/example.com/html/index.html

۴نوشتن server block (کانفیگ سایت)

فایل کانفیگ سایت را در sites-available بسازید. دستور try_files مشخص می‌کند اگر فایل پیدا نشد چه شود.

nginx
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;

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

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;
}

۵فعال کردن سایت

با یک لینک نمادین سایت را در sites-enabled فعال کنید. سایت پیش‌فرض را در صورت نیاز غیرفعال کنید.

bash
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

۶تست کانفیگ و اعمال تغییرات

همیشه قبل از reload دستور nginx -t را اجرا کنید. اگر پیام «syntax is ok» و «test is successful» آمد، reload کنید. reload بدون قطع اتصال‌های فعلی انجام می‌شود.

bash
sudo nginx -t
sudo systemctl reload nginx

۷تنظیم DNS و تست

در پنل دامنه یک رکورد A برای example.com و یک رکورد برای www به IP سرور بسازید. بعد از انتشار DNS تست کنید:

bash
curl -I http://example.com
dig +short example.com

برای فعال کردن HTTPS بعد از این مرحله، راهنمای «SSL رایگان با certbot» را دنبال کنید.

پرسش‌های پرتکرار دربارهٔ نصب nginx و کانفیگ پایه برای یک سایت استاتیک

تفاوت sites-available و sites-enabled چیست؟

sites-available محل نگه‌داری همهٔ فایل‌های کانفیگ است و sites-enabled فقط لینک‌هایی به سایت‌های فعال دارد. برای غیرفعال کردن یک سایت فقط لینک را پاک می‌کنید و فایل اصلی می‌ماند.

فرق reload و restart چیست؟

reload کانفیگ جدید را بدون قطع اتصال‌های در جریان اعمال می‌کند و اگر کانفیگ خطا داشته باشد نسخهٔ قبلی به کار ادامه می‌دهد. restart سرویس را کامل متوقف و دوباره اجرا می‌کند و اتصال‌ها قطع می‌شوند.