DISABLE_WP_CRON = true કરવાથી wp-cron.php એન્ડપોઈન્ટ બંધ (seal) થતું નથી; તે ફક્ત WordPress ને તેની પોતાની loopback request મોકલતા અટકાવે છે. આ ફાઇલ વેબ પરથી ઉપલબ્ધ રહે છે, તેથી કોઈપણ વ્યક્તિ હજુ પણ તેને એક્સેસ કરી શકે છે અને સંપૂર્ણ WordPress bootstrap કરવા માટે મજબૂર કરી શકે છે.
તે છુપાયેલું એન્ટ્રી પોઈન્ટ CPU, મેમરી અને PHP workers ને વેડફી શકે છે, ખાસ કરીને વ્યસ્ત સાઇટ્સ પર. જો તમને લાગતું હોય કે તમે દરવાજો બંધ કરી દીધો છે, તો તમે હજુ સુધી તે કર્યું નથી.
આ સેટિંગને વારંવાર કેમ ખોટી રીતે સમજવામાં આવે છે
જ્યારે WordPress શેડ્યૂલ કરેલું કાર્ય (scheduled task) ચલાવે છે, ત્યારે તે સૌ પ્રથમ તેની પોતાની wp-cron.php ફાઇલને એક ઝડપી HTTP request મોકલવાનો પ્રયાસ કરે છે. DISABLE_WP_CRON ને true પર સેટ કરવાથી કોર (core) ને તે આંતરિક request સ્કીપ કરવા માટે કહેવામાં આવે છે. કોર વેબ-સર્વર કોન્ફિગરેશનમાં કોઈ ફેરફાર કરતું નથી, કે wp-cron.php માં કોઈ authentication layer ઉમેરતું નથી. સ્ક્રિપ્ટ એક પબ્લિક URL તરીકે જ રહે છે જે 200 status રિટર્ન કરે છે, ભલે PHP પ્રોસેસ વહેલી સમાપ્ત થઈ જાય.
જે હુમલાખોર (attacker) ને URL મળી જાય તે તેને વારંવાર પિંગ કરી શકે છે, જેના કારણે દરેક વખતે WordPress એ તમામ plugins, themes અને ડેટાબેઝ લોડ કરવા પડે છે. શેર કરેડ હોસ્ટ અથવા મર્યાદિત PHP workers ધરાવતી સાઇટ પર, તે એકલ એન્ડપોઈન્ટ denial-of-service vector બની શકે છે.
ખરેખર શું કરવાની જરૂર છે
શેડ્યૂલ કરેલા કામને સિસ્ટમ-લેવલ શેડ્યૂલર (cron, systemd-timer, વગેરે) પર ખસેડવા અને પબ્લિક દરવાજો બંધ કરવા માટે, આ પાંચ સ્ટેપ્સ અનુસરો.
1. આંતરિક loopback ને ડિસેબલ કરો
wp-config.php માં આ લાઇન ઉમેરો
define( 'DISABLE_WP_CRON', true );
આ WordPress ને તેની પોતાની HTTP request મોકલતા અટકાવે છે, પરંતુ તે બાહ્ય (external) કોલ્સને અટકાવતું નથી.
2. વેબ-સર્વર પર wp-cron.php ને બ્લોક કરો
ઉદાહરણ તરીકે, Nginx સાથે, એક location block ઉમેરો જે 403 Forbidden રિટર્ન કરે:
location = /wp-cron.php {
return 403;
}
હવે સર્વર PHP શરૂ થાય તે પહેલાં જ request ને નકારી દેશે, જેનાથી bootstrap ખર્ચ (cost) દૂર થશે.
3. સેફ્ટી નેટ તરીકે mu-plugin ઉમેરો
એક must-use plugin બનાવો (wp-content/mu-plugins માં રાખવામાં આવેલ) જે wp-cron.php સુધી પહોંચતી કોઈપણ request ને લોગ કરે અને 403 સાથે એક્ઝિટ કરે. આ એવી requests ને પકડી લેશે જે કદાચ સર્વરના નિયમને બાયપાસ કરી જાય—કદાચ અલગ hostname અથવા CDN edge rule દ્વારા.
4. Action Scheduler async calls ને સપ્રેસ કરો
ઘણા plugins Action Scheduler લાઇબ્રેરીનો ઉપયોગ કરે છે, જે તેની પોતાની loopback requests બનાવી શકે છે. action_scheduler_queue_runner માં હૂક કરો અને non-CLI requests માટે વહેલા રિટર્ન કરો, જેથી લાઇબ્રેરી તેની પોતાની રીતે દરવાજા ખોલવાનો પ્રયાસ ન કરે.
5. WP-Cron hook માંથી queue runner ને અનહૂક કરો
wp cron hook સાથે જોડાયેલ ડિફોલ્ટ Action Scheduler queue runner ને દૂર કરો. આ સુનિશ્ચિત કરે છે કે ક્યુ (queue) ત્યારે જ ચાલે જ્યારે તમે તેને સ્પષ્ટપણે command line પરથી ટ્રિગર કરો.
કામ કરવાની સાચી રીત
પબ્લિક એન્ડપોઈન્ટ બંધ થયા પછી, WP-CLI દ્વારા દર મિનિટે (અથવા તમને જે જરૂર હોય તે રીતે) WordPress ને ઇનવોક કરવા માટે સિસ્ટમ શેડ્યૂલરનો ઉપયોગ કરો:
wp cron event run --due-now
આ એક જ કમાન્ડ કંટ્રોલ્ડ એન્વાયરમેન્ટમાં core cron ઇવેન્ટ્સ અને Action Scheduler ક્યુને પ્રોસેસ કરે છે, જે તે જ PHP પ્રોસેસનો ઉપયોગ કરે છે જે તમે અન્ય કોઈપણ CLI કાર્ય માટે ઉપયોગ કરશો.
ફાયદા જે તમે માપી શકો છો
- Security – કોઈપણ અનોથોરાઈઝ્ડ (unauthenticated) યુઝર ભારે બેકગ્રાઉન્ડ કામ શરૂ કરી શકશે નહીં.
- Performance – PHP workers વાસ્તવિક મુલાકાતીઓ માટે ઉપલબ્ધ રહેશે; વધારાના cron hits થી થતા મેમરી સ્પાઇક્સ દૂર થશે.
- Reliability – શેડ્યૂલિંગ પ્રોએક્ટિવ બને છે; તમને ચોક્કસ ખબર હશે કે કાર્ય ક્યારે ચાલે છે કારણ કે તે સિસ્ટમના cron દ્વારા સંચાલિત છે, મુલાકાતીના પેજ લોડ દ્વારા નહીં.
ફેરફાર કર્યા પછી શું ધ્યાન રાખવું
wp-cron.php ના HTTP status code પર આધાર રાખશો નહીં; PHP દ્વારા બ્લોક કરવામાં આવ્યા હોવા છતાં તે હજુ પણ 200 રિટર્ન કરી શકે છે. તેના બદલે:
- Action Scheduler ક્યુ સાઈઝનું મોનિટરિંગ કરો. વધતી જતી ક્યુ ઘણીવાર મિસ થયેલા રન (missed runs) નો સંકેત આપે છે.
- wp-cron.php location block માંથી આવતા “403” એન્ટ્રીઝ માટે સર્વર લોગ્સ તપાસો.
- લોડ ઘટી ગયો છે તેની ખાતરી કરવા માટે પીક ટ્રાફિક દરમિયાન PHP-FPM અથવા FastCGI પ્રોસેસ કાઉન્ટનું અવલોકન કરો.
સાવચેતી માટે નોંધ
કેટલાક એડમિનિસ્ટ્રેટર્સ DISABLE_WP_CRON ને false રાખે છે કારણ કે તેઓ ઓછી ટ્રાફિક ધરાવતી સાઇટ્સ પર કુદરતી રીતે cron ટ્રિગર થવા પર આધાર રાખે છે. ઉપરનો અભિગમ તે નિર્ભરતા સંપૂર્ણપણે દૂર કરે છે, પરંતુ તે મેન્ટેનન્સનું એક સ્ટેપ ઉમેરે છે: તમારે ખાતરી કરવી પડશે કે સિસ્ટમ શેડ્યૂલર વિશ્વસનીય રીતે ચાલે છે. જો સર્વરનું cron daemon નિષ્ફળ જાય, તો શેડ્યૂલ કરેલા કાર્યો અટકી જાય છે. આ મુશ્કેલીથી બચવા માટે સેટઅપને સિસ્ટમ cron સર્વિસના મોનિટરિંગ સાથે જોડો.
Bottom line: DISABLE_WP_CRON ને true પર સેટ કરવાથી ફક્ત WordPress ને પોતાની જાતને પિંગ કરતા અટકાવે છે; તે પબ્લિક wp-cron.php એન્ડપોઈન્ટને બંધ કરતું નથી. વેબ-સર્વર પર ફાઇલને બ્લોક કરો, mu-plugin ફોલબેક ઉમેરો, અને તમામ શેડ્યૂલ કરેલા કામને WP-CLI દ્વારા સિસ્ટમ શેડ્યૂલર દ્વારા રૂટ કરો. આમ કરવાથી સાઇટ સુરક્ષિત થાય છે, બિનજરૂરી PHP કાર્ય ઘટે છે, અને બેકગ્રાઉન્ડ કાર્યો ક્યારે એક્ઝિક્યુટ થાય છે તેના પર તમને ચોક્કસ નિયંત્રણ મળે છે.
