میزبانی چند سایت و زیردامنه روی یک سرور nginx
با nginx میتوانید دهها سایت را روی یک سرور و یک IP اجرا کنید. nginx بر اساس هدر Host تشخیص میدهد کدام server block پاسخ دهد. هر سایت فایل کانفیگ، پوشه و لاگ جدا دارد.
۱ساختار پیشنهادی
برای هر سایت یک پوشه و یک فایل کانفیگ به نام دامنه بسازید تا مدیریت راحت شود.
/var/www/site-a.com/html
/var/www/site-b.com/html
/etc/nginx/sites-available/site-a.com
/etc/nginx/sites-available/site-b.com
/var/log/nginx/site-a.com.access.log۲کانفیگ سایت اول و دوم
هر سایت server_name متفاوت دارد. nginx بر اساس نام دامنه انتخاب میکند.
# /etc/nginx/sites-available/site-a.com
server {
listen 80;
server_name site-a.com www.site-a.com;
root /var/www/site-a.com/html;
index index.html;
location / { try_files $uri $uri/ =404; }
access_log /var/log/nginx/site-a.com.access.log;
error_log /var/log/nginx/site-a.com.error.log;
}
# /etc/nginx/sites-available/site-b.com
server {
listen 80;
server_name site-b.com www.site-b.com;
root /var/www/site-b.com/html;
index index.html;
location / { try_files $uri $uri/ =404; }
access_log /var/log/nginx/site-b.com.access.log;
error_log /var/log/nginx/site-b.com.error.log;
}۳فعالسازی هر دو سایت
لینکها را بسازید، تست کنید و reload کنید.
sudo ln -s /etc/nginx/sites-available/site-a.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx۴زیردامنهها (wildcard) با پوشههای جدا
اگر هر زیردامنه پوشهٔ خودش را دارد میتوانید با یک server block همهٔ آنها را پوشش دهید. نام زیردامنه در متغیر sub ذخیره میشود.
server {
listen 80;
server_name ~^(?<sub>[a-z0-9-]+)\.example\.com$;
root /var/www/subdomains/$sub;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}برای HTTPS روی wildcard باید گواهی wildcard با اعتبارسنجی DNS بگیرید.
۵سایت پیشفرض برای دامنههای ناشناس
درخواستهایی که به IP سرور یا دامنهٔ ناشناس میرسند را رد کنید تا رباتها سایتهای شما را با IP پیدا نکنند.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}۶اسکریپت ساده برای افزودن سایت جدید
این اسکریپت پوشه، کانفیگ و لینک را میسازد. آن را با sudo اجرا کنید: ./add-site.sh example.org
#!/usr/bin/env bash
set -euo pipefail
DOMAIN="$1"
mkdir -p "/var/www/$DOMAIN/html"
cat > "/etc/nginx/sites-available/$DOMAIN" <<EOF
server {
listen 80;
server_name $DOMAIN www.$DOMAIN;
root /var/www/$DOMAIN/html;
index index.html;
location / { try_files \$uri \$uri/ =404; }
access_log /var/log/nginx/$DOMAIN.access.log;
error_log /var/log/nginx/$DOMAIN.error.log;
}
EOF
ln -sf "/etc/nginx/sites-available/$DOMAIN" "/etc/nginx/sites-enabled/$DOMAIN"
nginx -t && systemctl reload nginx
echo "سایت $DOMAIN ساخته شد."۷دریافت SSL برای همهٔ سایتها
certbot را برای هر دامنه اجرا کنید؛ تمدید همه با یک تایمر انجام میشود.
sudo certbot --nginx -d site-a.com -d www.site-a.com
sudo certbot --nginx -d site-b.com -d www.site-b.com
sudo certbot certificatesپرسشهای پرتکرار دربارهٔ میزبانی چند سایت و زیردامنه روی یک سرور nginx
چند سایت را میتوان روی یک سرور اجرا کرد؟
به منابع (رم، CPU، دیسک) و ترافیک بستگی دارد نه به nginx. nginx میتواند صدها server block را مدیریت کند؛ محدودیت واقعی برنامهها و دیتابیس هر سایت است.