یک ماه بلاتکلیفی؛ چرا وردپرس و المنتور بهروزرسانی نمیشدند؟
حدود یک ماه، وبسایت شبکه وب در وضعیتی بلاتکلیف قرار داشت. نسخه جدید وردپرس در دسترس بود، Elementor و Elementor Pro نیاز به بهروزرسانی داشتند و چند افزونه دیگر نیز نسخههای تازهای منتشر کرده بودند؛ اما هر بار که روی دکمه «بهروزرسانی» کلیک میکردیم، هیچ فرایند دانلود یا نصبی آغاز نمیشد.
این مقاله، روایت واقعی عیبیابی این مشکل است؛ مشکلی که در ابتدا شبیه یک خطای ساده در وردپرس بهنظر میرسید، اما در نهایت مشخص شد به محدودیت ارتباط خروجی سرور مربوط است.
مشکل از کجا شروع شد؟
در ظاهر، همهچیز طبیعی بود. پیشخوان وردپرس باز میشد، صفحات سایت در دسترس بودند و افزونهها نیز کار میکردند؛ اما بهروزرسانی انجام نمیشد.
نشانههای اصلی مشکل به همراه فرضیات اولیه در ادامه خلاصه شده است:
| نشانه خطا | برداشت و فرضیه اولیه | نتیجه نهایی بررسی |
|---|---|---|
| عدم بهروزرسانی هسته وردپرس | احتمال خرابی هسته سیستم یا اختلال اینترنت | ارتباط با مخزن اصلی وردپرس مسدود شده بود. |
| عدم ارتقای Elementor و Elementor Pro | احتمال خطای لایسنس یا عدم سازگاری PHP | دسترسی به سرورهای توزیع فایل المنتور با سرور اصلی کامل نبود. |
| عدم واکنش دکمه «بهروزرسانی» | خرابی کدهای پیشخوان یا خطای جاوااسکریپت | درخواست خروجی سرور ناقص مانده و متوقف میشد. |
| عدم نصب اتصالدهندههای هوش مصنوعی | احتمال خطای برنامهنویسی یا تحریم افزونه AI | دسترسی به برخی از دامنههای بیرونی API مسدود بود. |
در چنین شرایطی، معمولاً اولین مظنونها افزونههای امنیتی، محدودیت حافظه، نسخه PHP، مجوز فایلها یا اختلال اینترنت هستند؛ اما این بار علت اصلی در جای دیگری قرار داشت.
اولین سرنخ: خطای External Request Guard
در بخش «سلامت سایت» یا Site Health، خطایی با عنوان External Request Guard دیده شد.
«سلامت سایت» بخشی از وردپرس است که وضعیت فنی وبسایت را بررسی میکند. این بخش مواردی مانند نسخه PHP، ارتباط با WordPress.org، اجرای وظایف زمانبندیشده، دسترسی به درخواستهای خروجی و مشکلات امنیتی را گزارش میدهد.
خطای گزارششده:
ابزار External Request Guard درخواست سایت به WordPress.org و Downloads.WordPress.org را مسدود کرده بود.
External Request Guard چیست؟
External Request Guard ابزاری برای کنترل درخواستهای خروجی سایت است. درخواست خروجی زمانی ایجاد میشود که وردپرس بخواهد با یک سرور بیرونی ارتباط برقرار کند؛ برای مثال:
- بررسی نسخه جدید وردپرس؛
- دانلود فایل افزونهها;
- دریافت بستههای ترجمه;
- اتصال به سرویسهای هوش مصنوعی;
- ارتباط با سرویسهای سئو، فرمساز، کش یا شبکه توزیع محتوا.
در بررسیها مشخص شد این Guard برخی درخواستها را بهدلیل کندی ارتباط، بهصورت خودکار مسدود کرده است. پس از غیرفعالکردن آن، ارتباط با WordPress.org دوباره برقرار شد؛ اما هنوز بخشی از مشکل باقی مانده بود.
چرا Wordfence مقصر اصلی نبود؟
از آنجا که Wordfence یک افزونه امنیتی قدرتمند است، احتمال دادیم این افزونه مانع ارتباط با سرورهای خارجی شده باشد. برای آزمایش، Wordfence موقتاً غیرفعال شد؛ اما مشکل بهروزرسانی همچنان ادامه داشت. این آزمایش نشان داد Wordfence علت اصلی مشکل نیست. غیرفعالکردن تصادفی افزونههای امنیتی، بدون بررسی شواهد، ممکن است امنیت سایت را کاهش دهد و در عین حال کمکی به حل مشکل نکند.
بررسی افزونههای اجباری و فایلهای پنهان وردپرس
در ادامه، پوشه mu-plugins بررسی شد.
MU Plugin چیست؟
عبارت MU Plugin کوتاهشده Must-Use Plugin است. این افزونهها برخلاف افزونههای عادی، بهصورت اجباری اجرا میشوند و معمولاً از صفحه عادی افزونهها قابل غیرفعالکردن نیستند.
وجود یک فایل کوچک در این پوشه میتواند رفتار مهمی در سایت ایجاد کند؛ از تغییر مسیر بهروزرسانی گرفته تا محدودکردن درخواستها یا مدیریت لایسنس افزونهها. در این مرحله چند فایل مربوط به سیستم بهروزرسانی ابزار وردپرس نیز بررسی شدند، اما شواهد کافی برای مقصر دانستن آنها وجود نداشت.
پیام «دیتابیس در حال بهروزرسانی است»
در یکی از مراحل، هنگام افزودن کاربر جدید، وردپرس پیام داد که دیتابیس در حال بهروزرسانی است.
دیتابیس چیست؟
دیتابیس یا پایگاه داده، محل ذخیره اطلاعات اصلی سایت است؛ از جمله نوشتهها، برگهها، اطلاعات کاربران، تنظیمات وردپرس، محصولات و سفارشها.
این پیام میتوانست نشان دهد یکی از بهروزرسانیهای قبلی نیمهتمام مانده یا یک قفل موقت در دیتابیس باقی مانده است.
core_updater.lock چیست؟
وردپرس هنگام اجرای بهروزرسانی، یک قفل موقت با عنوان core_updater.lock ایجاد میکند تا دو فرایند بهروزرسانی بهطور همزمان اجرا نشوند. اگر عملیات بهروزرسانی ناگهان متوقف شود، ممکن است این قفل باقی بماند و وردپرس تصور کند هنوز فرایند قبلی در حال اجراست.
بررسی پوشه موقت بهروزرسانی
پوشه زیر نیز بررسی شد:
wp-content/upgrade
وردپرس معمولاً فایلهای موقت بهروزرسانی را در این پوشه قرار میدهد. اگر یک نصب نیمهتمام باقی مانده باشد، ممکن است فایلها یا پوشههای ناقص در این مسیر دیده شوند. در سایت شبکه وب، پوشه upgrade خالی بود; بنابراین مشخص شد فایل ناقص یا بسته بهروزرسانی نیمهتمام در این مسیر باقی نمانده است.
پاسخ نهایی نتافراز چه بود؟
پس از پیگیری تیکت، پشتیبانی فنی نتافراز اعلام کرد تعدادی دامنه موردنیاز به فهرست مجاز ارتباطهای خروجی سرور اضافه شدهاند. برخی از دامنههای افزودهشده عبارت بودند از:
- wordpress.org
- plugins.svn.wordpress.org
- rankmath.com
- gravityforms.com
- gravityapi.com
- powerpackelements.com
- ams.wpml.org
- packages.translationspress.com
- b.rucss.wp-rocket.me
- www.cloudflare.com
- www.googletagmanager.com
- support.brainstormforce.com
Repository چیست؟
Repository بهمعنای «مخزن» است. مخزن، سروری است که فایلهای نرمافزار، افزونه، ترجمه یا بستههای بهروزرسانی در آن نگهداری میشوند. برای مثال، وقتی وردپرس میخواهد یک افزونه را بهروزرسانی کند، باید به مخزن مربوط به آن افزونه متصل شود، فایل نسخه جدید را دانلود کند و سپس آن را روی سایت نصب کند. اگر سرور اجازه اتصال به مخزن مقصد را نداشته باشد، بهروزرسانی انجام نمیشود؛ حتی اگر اینترنت سایت، PHP و خود وردپرس ظاهراً سالم باشند.
فهرست مجاز خروجی سرور چیست؟
سرورها برای افزایش امنیت میتوانند ارتباطهای خروجی را محدود کنند. در این حالت، فقط دامنههایی که در «فهرست مجاز» یا Allow List قرار گرفتهاند، قابل دسترسی هستند. این وضعیت شبیه ساختمانی است که اینترنت دارد، اما ساکنان فقط اجازه ورود به چند وبسایت مشخص را دارند. در سایت شبکه وب، سرور به برخی از دامنههای ضروری اجازه ارتباط نمیداد. پس از افزودن این دامنهها به فهرست مجاز، وردپرس و افزونهها توانستند دوباره به مخازن اصلی خود متصل شوند.
تفاوت Allow List با Firewall چیست؟
فایروال یا دیواره آتش، ترافیک ورودی و خروجی سرور را کنترل میکند. Allow List یکی از روشهای محدودسازی فایروال است. در روش Allow List، اصل بر مسدودبودن است؛ یعنی فقط دامنههایی که بهصورت مشخص تأیید شدهاند، اجازه ارتباط دارند. در مقابل، در روش Block List، اصل بر آزادبودن ارتباط است و فقط دامنههای مشخصی مسدود میشوند.
چرا بعضی افزونهها بهروزرسانی شدند و بعضی نه؟
یکی از پرسشهای مهم این بود که چرا برخی افزونهها بهروزرسانی شدند، اما Elementor یا خود وردپرس بهروزرسانی نمیشدند. دلیل این است که همه افزونهها فایلهای خود را از یک سرور دریافت نمیکنند. برای مثال:
- افزونههای رایگان معمولاً از WordPress.org دانلود میشوند؛
- افزونههای تجاری ممکن است از سرور اختصاصی شرکت سازنده دریافت شوند؛
- بعضی افزونههای بومی از سرور فروشنده ایرانی بهروزرسانی میشوند؛
- بستههای ترجمه ممکن است از مخزن دیگری دریافت شوند.
بنابراین ممکن است اتصال به یک مخزن آزاد باشد، اما مخزن دیگری در فهرست مجاز سرور قرار نداشته باشد.
پس از اصلاح فهرست مجاز چه اتفاقی افتاد؟
بعد از اعمال تنظیمات سرور، فرایندهای زیر با موفقیت انجام شدند:
- وردپرس به نسخه جدید ارتقا یافت؛
- Elementor به نسخه جدید بهروزرسانی شد;
- Elementor Pro به نسخه جدید ارتقا پیدا کرد؛
- کتابخانه و فایلهای CSS المنتور بازسازی شدند؛
- اتصالدهنده رسمی Google AI نصب شد؛
- Gemini API با موفقیت به وردپرس متصل شد؛
- قابلیتهای هوش مصنوعی وردپرس فعال شدند.
این نتیجه نشان داد مشکل صرفاً از یک افزونه یا دکمه خراب نبود؛ سرور نمیتوانست به برخی منابع ضروری بیرونی متصل شود.
External Request Guard مقصر بود یا فقط نشانه را گزارش میکرد؟
External Request Guard در این ماجرا نقش مهمی داشت، اما نمیتوان گفت تنها علت مشکل بود. این Guard بعضی درخواستها را مسدود کرده بود؛ اما در سطح سرور نیز دامنههای موردنیاز در فهرست مجاز خروجی قرار نداشتند. به بیان ساده، دو لایه محدودیت وجود داشت: یکی محدودیت در داخل وردپرس و دیگری محدودیت در تنظیمات ارتباط خروجی سرور. برای حل کامل مشکل، لازم بود هر دو لایه بررسی شوند.
چکلیست جامع عیبیابی بهروزرسانی وردپرس
اگر وردپرس یا افزونههای شما بهروزرسانی نمیشوند، این موارد را بهترتیب بررسی کنید:
- از سایت و دیتابیس نسخه پشتیبان بگیرید.
- بخش «سلامت سایت» را بررسی کنید.
- وجود خطا در ارتباط با WordPress.org را کنترل کنید.
- افزونههای امنیتی را فقط برای آزمایش و بهصورت موقت بررسی کنید.
- پوشه
mu-pluginsرا کنترل کنید. - فایلها و پوشههای داخل
wp-content/upgradeرا بررسی کنید. - لاگهای PHP و وبسرور را ببینید.
- وضعیت قفل
core_updater.lockرا بررسی کنید. - مجوزها و مالکیت فایلها را کنترل کنید.
- محدودیتهای ModSecurity، WAF و LiteSpeed را بررسی کنید.
- از هاست بخواهید ارتباط خروجی به مخازن افزونهها را بررسی کند.
- دامنههای ضروری را در Allow List سرور قرار دهید.
لاگ PHP و وبسرور چیست؟
«لاگ» بهمعنای گزارش رویدادها و خطاهای فنی است. اگر هنگام دانلود، استخراج یا نصب افزونه خطایی رخ دهد، ممکن است جزئیات آن در گزارش PHP یا وبسرور ثبت شود؛ حتی اگر چیزی در پیشخوان وردپرس نمایش داده نشود. عبارتهایی مانند موارد زیر در لاگها میتوانند علت مشکل را مشخص کنند:
Connection timed outcURL errorPermission deniedAllowed memory size exhaustedMaximum execution time exceededHTTP 403/HTTP 500
مجوز فایلها و مالکیت آنها چه نقشی دارند؟
وردپرس برای نصب نسخه جدید باید بتواند فایلهای قدیمی را تغییر دهد و فایلهای جدید را جایگزین کند. اگر سطح دسترسی فایلها یا مالکیت آنها نادرست باشد، وردپرس ممکن است بتواند نسخه جدید را دانلود کند، اما در مرحله نصب متوقف شود. به این تنظیمات اصطلاحاً Permissions و Ownership گفته میشود.
ModSecurity، WAF و LiteSpeed چه هستند؟
- ModSecurity: یک ابزار امنیتی در سطح وبسرور است که درخواستهای مشکوک را شناسایی و مسدود میکند.
- WAF: مخفف Web Application Firewall و بهمعنای «دیواره آتش برنامههای وب» است. این سیستم از سایت در برابر حملات و درخواستهای خطرناک محافظت میکند.
- LiteSpeed: LiteSpeed یک وبسرور پرسرعت است که امکاناتی مانند کش، فشردهسازی و مدیریت درخواستها را ارائه میدهد.
گاهی یکی از این ابزارها ممکن است یک درخواست سالم را اشتباهاً مشکوک تشخیص دهد و آن را متوقف کند.
WP-Cron چیست؟
WP-Cron سیستم زمانبندی داخلی وردپرس است. وردپرس با کمک آن وظایفی مانند بررسی نسخه جدید، انتشار نوشتههای زمانبندیشده، ارسال بعضی ایمیلها و اجرای کارهای دورهای افزونهها را انجام میدهد. اگر WP-Cron درست کار نکند، ممکن است بررسی نسخههای جدید یا بعضی عملیات پسزمینه با تأخیر مواجه شوند.

درسهایی که از این تجربه گرفتیم
- هر خطا الزاماً از داخل وردپرس نیست: گاهی همهچیز در وردپرس سالم است، اما محدودیتهای سرور مانع اجرای عملیات میشوند.
- غیرفعالکردن همه افزونهها همیشه راهحل نیست: عیبیابی باید مرحلهبهمرحله و بر اساس شواهد انجام شود.
- پیامهای سلامت سایت را جدی بگیرید: بخش Site Health میتواند سرنخهایی ارائه دهد که در صفحه عادی بهروزرسانی دیده نمیشوند.
- از پشتیبانی هاست پاسخ دقیق بخواهید: عبارتهایی مانند «تغییراتی اعمال شد» برای مستندسازی کافی نیستند. بهتر است درخواست کنید دقیقاً اعلام شود چه تنظیمی تغییر کرده است.
- پیش از هر بهروزرسانی مهم، بکاپ بگیرید: نسخه پشتیبان، امکان بازگشت به وضعیت سالم قبلی را فراهم میکند.
جمعبندی نهایی
مشکل بهروزرسانی وردپرس همیشه به خرابی افزونه، نسخه PHP یا اینترنت کاربر مربوط نیست. در این تجربه، بخشی از مشکل از External Request Guard و بخش مهمتر آن از محدودیت ارتباط خروجی سرور با مخازن اصلی وردپرس و افزونهها ناشی میشد. پس از افزودن دامنههای ضروری به فهرست مجاز خروجی سرور، وردپرس و افزونهها دوباره توانستند به منابع خود متصل شوند و فرایند بهروزرسانی با موفقیت انجام شد.
کلام آخر: اگر دکمه «بهروزرسانی» را میزنید و هیچ اتفاقی نمیافتد، فقط داخل وردپرس دنبال علت نگردید؛ ممکن است سرور اجازه خروج به مخزن موردنیاز را نداشته باشد.
وضعیت پرونده: حلشده؛ علت نهایی با پاسخ فنی شرکت میزبان مشخص شد.
این مقاله بر اساس یک تجربه واقعی در وبسایت شبکه وب تهیه شده است و در صورت دریافت اطلاعات تکمیلی، بهروزرسانی خواهد شد.
تجربههای فنی زمانی ارزش واقعی پیدا میکنند که به اشتراک گذاشته شوند. لطفاً به این ۴ سوال فکر کنید و پاسخ خود را در بخش نظرات برای ما بنویسید:
۱. آیا تا به حال با دکمه بهروزرسانی بیواکنش در وردپرس مواجه شدهاید؟
در آن زمان فکر میکردید مشکل از کجاست؟ و در نهایت چطور توانستید آن را حل کنید؟
۲. هاست شما چقدر در حل مشکلات مربوط به ارتباطات خارجی سرور همکاری میکند؟
آیا تا به حال مجبور شدهاید برای باز کردن یک دامنه خاص در لایه فایروال سرور (Allow List) با پشتیبانی تیکت بزنید؟
۳. از چه ابزارهایی برای سنجش مداوم سلامت سایت خود استفاده میکنید؟
آیا بخش بومی Site Health وردپرس توانسته است تا به حال خطاهای پنهان هاست شما را آشکار کند؟
۴. افزونههای امنیتی شما چقدر بر روی درخواستهای خروجی وبسایتتان تاثیر میگذارند؟
آیا تجربه مسدود شدن ناخواسته اتصالات API (مثلاً هوش مصنوعی یا درگاه بانکی) توسط افزونههایی مثل Wordfence را داشتهاید؟