صفحةُ صيانة تُرجِع ٢٠٠ تقول لمحرّكات البحث إن موقعك كلَّه صار صفحةً مكتوبًا عليها «نعود قريبًا»، وستفهرسها. والجوابُ الصحيح ٥٠٣ مع ترويسة Retry-After، ومعناها: غيرُ متاحٍ مؤقّتًا، فعُد لاحقًا — ولا يكلّف شيئًا.
Nginx
server {
# ...
if (-f /var/www/site/maintenance.on) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
root /var/www/site/public;
rewrite ^ /maintenance.html break;
add_header Retry-After 3600 always;
}
}
sudo touch /var/www/site/maintenance.on # on
sudo rm /var/www/site/maintenance.on # off
ومفتاحٌ بملفٍّ يعني ألّا إعادةَ تحميل ولا تغييرَ إعدادات، ويمكن قلبه من سكربت نشر.
وأدخِل نفسك
set $maint 0;
if (-f /var/www/site/maintenance.on) { set $maint 1; }
if ($remote_addr = 203.0.113.42) { set $maint 0; }
if ($maint = 1) { return 503; }
فبلا استثناءٍ لا تستطيع اختبار الإصلاح الذي تنشره، والردُّ المعتاد أن يُطفَأ وضعُ الصيانة والموقعُ ما زال مكسورًا. ضع عنوانك أنت قبل أن تحتاج إليه.
ماذا ينبغي أن تقول الصفحة
- أنها صيانةٌ مخطَّطة، ومتى يعود الموقع — وقتًا حقيقيًّا لا «قريبًا».
- وسبيلًا للوصول إليك لا يعتمد على الموقع.
- ولا اعتمادَ على التطبيق: ملفٌّ ساكن بأنماطٍ داخله.
افحصها
curl -sSI https://yourdomain.com/ | grep -E '^HTTP|retry-after'
# HTTP/2 503
# retry-after: 3600
ولنشرٍ يستغرق ثوانيَ لا تستعمل وضع الصيانة البتّة: ابنِ في مجلّدٍ جديد وبدّل رابطًا رمزيًّا. فلا يرى أحدٌ شيئًا — انظر النشرُ بتبديلٍ ذرّي.