जब आप एक आधुनिक वेबसाइट चलाते हैं, तो वेब आर्किटेक्चर अक्सर कई स्तरों (Layers) में काम करता है: सबसे आगे Cloudflare CDN या Nginx रिवर्स प्रॉक्सी होती है, और उसके पीछे मुख्य एप्लीकेशन सर्वर (जैसे PHP-FPM, Apache या Node.js) और डेटाबेस काम कर रहे होते हैं। जब इस मल्टी-टियर सिस्टम में कोई एक घटक दूसरे से ठीक से बात नहीं कर पाता, तो स्क्रीन पर दो सबसे कुख्यात गेटवे एरर्स दिखाई देते हैं: "502 Bad Gateway" और "504 Gateway Timeout"।
अक्सर ब्लॉगर्स और डेवलपर्स इन दोनों एरर्स में भ्रमित हो जाते हैं और गलत फाइल्स में बदलाव करने लगते हैं। यह समझना जरूरी है कि 502 और 504 एक ही सिक्के के दो अलग-अलग पहलू हैं। 502 का मतलब है कि आपके गेटवे को पीछे से "गलत जवाब" मिला, जबकि 504 का मतलब है कि उसे तय समय में "कोई जवाब ही नहीं मिला"।
इस विस्तृत गाइड में हम Nginx प्रॉक्सी सेटिंग्स, PHP-FPM प्रोसेस पूल ट्यूनिंग, क्लाउडफ्लेयर एज रूल्स और सर्वर लॉग एनालिसिस के जरिए इन दोनों एरर्स को जड़ से मिटाने की 100% प्रैक्टिकल SOP समझेंगे ताकि आपकी साइट कभी भी डाउन न हो।
1. 502 Bad Gateway और 504 Gateway Timeout क्या हैं? बुनियादी अंतर
इंटरनेट के HTTP प्रोटोकॉल में 'Gateway' (गेटवे) उस सर्वर को कहा जाता है जो विज़िटर के अनुरोध को मुख्य बैकएंड सर्वर तक पहुँचाने वाले मध्यस्थ (Reverse Proxy / Load Balancer) के रूप में कार्य करता है।
502 Bad Gateway (अमान्य रिस्पॉन्स):
- क्या होता है: Nginx या Cloudflare ने आपके बैकएंड PHP सर्वर से संपर्क किया। बैकएंड ने जवाब तो भेजा, लेकिन वह जवाब विकृत, आधा-अधूरा, या अमान्य हेडर वाला था।
- सबसे आम कारण: PHP-FPM सर्विस का अचानक क्रैश हो जाना, सर्वर की रैम 100% भर जाना, या Nginx और PHP-FPM के बीच यूनिक्स सॉकेट (Unix Socket) की परमिशन टूटना।
504 Gateway Timeout (समय सीमा समाप्त):
- क्या होता है: गेटवे ने बैकएंड से अनुरोध किया, लेकिन बैकएंड सर्वर ने तय समय (डिफ़ॉल्ट रूप से 60 सेकंड) के भीतर कोई उत्तर ही नहीं दिया। गेटवे ने इंतज़ार करते-करते थककर हाथ खड़े कर दिए और विज़िटर को 504 एरर दिखा दिया।
- सबसे आम कारण: भारी डेटाबेस क्वेरी का फंस जाना (Database Deadlock), कोई बाहरी एपीआई कॉल का हैंग हो जाना, या किसी बड़े बैकअप/प्लगइन का अनंत लूप में चलना।
2. 5-कॉलम तुलना सारणी: 502 बनाम 504 एरर, घटक, लॉग संकेत और समाधान समय
नीचे दी गई सारणी में दोनों गेटवे एरर्स के तकनीकी लक्षणों, उनके उत्तरदायी घटकों और समाधान की स्पष्ट तुलना की गई है:
| एरर कोड व नाम | तकनीकी अर्थ (HTTP RFC) | दोषी सर्वर घटक (Culprit) | सर्वर लॉग में सटीक मैसेज | मानक समाधान प्रक्रिया (SOP) |
|---|---|---|---|---|
| 502 Bad Gateway | अपस्ट्रीम सर्वर ने अवैध उत्तर दिया | PHP-FPM / Apache Backend | connect() failed (111: Connection refused) |
PHP-FPM सर्विस रीस्टार्ट करें व सॉकेट परमिशन जांचें |
| 504 Gateway Timeout | अपस्ट्रीम सर्वर ने तय समय में उत्तर नहीं दिया | MySQL Query / Slow PHP Script | upstream timed out (110: Connection timed out) |
fastcgi_read_timeout बढ़ाएं व स्लो क्वेरीज फिक्स करें |
| Cloudflare 502 (Host Error) | क्लाउडफ्लेयर ओरिजिन वेब सर्वर तक नहीं पहुँच सका | Origin Nginx / Apache Server | Cloudflare Error 502: Bad Gateway |
होस्टिंग सर्वर पर वेब सर्वर सर्विस का स्टेटस चेक करें |
| Cloudflare 504 (Origin Timeout) | ओरिजिन सर्वर 100 सेकंड में जवाब नहीं दे पाया | Origin PHP Execution Time | Cloudflare Error 504: Gateway Timeout |
PHP max_execution_time 300s करें व पेज वेट घटाएं |
| 502 Socket Permission Error | Nginx को PHP सॉकेट पढ़ने का अधिकार नहीं है | Linux File Permissions | permission denied while connecting to upstream |
www-data यूजर को सॉकेट फाइल की ओनरशिप सौंपें |
3. 502 Bad Gateway का समाधान: PHP-FPM सर्विस क्रैश और सॉकेट मिसमैच
यदि आपकी साइट पर 502 एरर आ रहा है, तो 90% मामलों में इसका कारण PHP-FPM सर्विस का बंद होना होता है:
स्टेप 1: PHP-FPM का स्टेटस जांचें और रीस्टार्ट करें
- टर्मिनल में SSH लॉगिन करें और यह कमांड चलाएं:
(यदि आप PHP 8.1 या 8.3 इस्तेमाल कर रहे हैं, तो अपने वर्जन का नंबर डालें)।sudo systemctl status php8.2-fpm - यदि स्टेटस में Active: failed या dead लिखा है, तो सर्विस को रीस्टार्ट करें:
sudo systemctl restart php8.2-fpm - वेबसाइट को रीफ्रेश करें। अधिकांश मामलों में 502 एरर तुरंत गायब हो जाता है।
स्टेप 2: Nginx और PHP-FPM सॉकेट पाथ का मिलान करना
कई बार PHP अपडेट होने के बाद Nginx पुराने सॉकेट (जैसे php8.1-fpm.sock) को ढूंढता रहता है जबकि सिस्टम में नया सॉकेट (php8.2-fpm.sock) बन चुका होता है:
- जांचें कि आपके सर्वर में कौन सी सॉकेट फाइल मौजूद है:
ls -la /run/php/ - अपनी Nginx साइट कन्फिगरेशन फाइल (
/etc/nginx/sites-available/yourdomain) खोलें औरfastcgi_passलाइन देखें:fastcgi_pass unix:/run/php/php8.2-fpm.sock; - सुनिश्चित करें कि यहाँ लिखा गया वर्जन नंबर और
/run/php/में मौजूद फाइल का नाम 100% एक जैसा हो। - Nginx कॉन्फ़िगरेशन टेस्ट करें और रीलोड करें:
sudo nginx -t && sudo systemctl reload nginx
4. 504 Gateway Timeout का समाधान: स्लो क्वेरीज और Nginx टाइमआउट बढ़ाना
यदि स्क्रीन पर 504 एरर आ रहा है, तो इसका मतलब है कि Nginx बहुत जल्दी उम्मीद छोड़ रहा है। डिफ़ॉल्ट 60 सेकंड की सीमा को बढ़ाकर 300 सेकंड (5 मिनट) करने से टाइमआउट एरर हल हो जाता है:
Nginx में टाइमआउट बढ़ाने का सटीक कोड:
- अपनी Nginx साइट कन्फिग फाइल खोलें और
location ~ .php$ब्लॉक के अंदर ये 3 लाइनें जोड़ें:fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_connect_timeout 300; - यदि आप Nginx को रिवर्स प्रॉक्सी की तरह इस्तेमाल कर रहे हैं (जैसे Apache या Node.js के आगे), तो मुख्य
http { ... }ब्लॉक याserver { ... }ब्लॉक में यह कोड जोड़ें:proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; - Nginx को रीलोड करें:
sudo systemctl reload nginx।
PHP सेटिंग्स में टाइमआउट सिंक करना:
Nginx का टाइमआउट बढ़ाने के साथ-साथ PHP का टाइमआउट बढ़ाना भी अनिवार्य है, वरना PHP 60वें सेकंड पर स्क्रिप्ट को मार देगा:
- अपनी
php.iniफाइल मेंmax_execution_time = 300सेट करें। - PHP-FPM पूल फाइल (
/etc/php/8.2/fpm/pool.d/www.conf) मेंrequest_terminate_timeout = 300सेट करें और सर्विस रीस्टार्ट करें।
5. Cloudflare में 502 और 504 एरर: Origin बनाम Edge की पहचान कैसे करें?
यदि आपकी वेबसाइट Cloudflare के माध्यम से चल रही है, तो स्क्रीन पर दिखने वाला डिज़ाइन आपको तुरंत बता देता है कि गलती किसकी है:
- Cloudflare Branded 502/504 Error: यदि एरर पेज पर Cloudflare का बड़ा लोगो बना है और नीचे एक डायग्राम में "Browser: Working", "Cloudflare: Working" और "Host: Error" दिख रहा है, तो इसका मतलब है कि Cloudflare पूरी तरह स्वस्थ है लेकिन आपकी होस्टिंग कंपनी का सर्वर डाउन है। आपको अपने होस्टिंग प्रोवाइडर से संपर्क करना होगा या सर्वर रीस्टार्ट करना होगा।
- Plain Text 502/504 Error: यदि स्क्रीन पर बिना किसी लोगो के सादे काले अक्षरों में सिर्फ
502 Bad Gateway (nginx)लिखा है, तो इसका मतलब है कि क्लाउडफ्लेयर ने तो रिक्वेस्ट सही पास कर दी, लेकिन आपके अपने ओरिजिन सर्वर के अंदर Nginx और PHP-FPM का कनेक्शन टूटा हुआ है। - Cloudflare 100-Second Hard Limit: ध्यान रखें कि Cloudflare के फ्री टियर पर 100 सेकंड का हार्ड टाइमआउट होता है। यदि आपकी कोई स्क्रिप्ट (जैसे डेटाबेस बैकअप या लंबा CSV इम्पोर्ट) 100 सेकंड से ज्यादा चलती है, तो Cloudflare अपने आप 504 Gateway Timeout फेंक देगा। इसका एकमात्र समाधान यह है कि उस भारी यूआरएल को Cloudflare के 'Page Rules' में जाकर Cache Level: Bypass कर दें या डायरेक्ट ओरिजिन आईपी से एक्सेस करें।
6. PHP-FPM पूल ट्यूनिंग: pm.max_children का रैम-आधारित गणित
502 और 504 एरर्स का सबसे बड़ा अदृश्य कारण है गलत PHP-FPM प्रोसेस सेटिंग्स। जब एक साथ कई यूज़र्स साइट पर आते हैं, तो उपलब्ध प्रोसेस वर्कर्स खत्म हो जाते हैं और नया ट्रैफिक हैंग हो जाता है।
pm.max_children की गणना करने का फॉर्मूला:
- जांचें कि एक औसत वर्डप्रेस PHP प्रोसेस कितनी रैम खाती है:
(सामान्य वर्डप्रेस साइट पर एक प्रोसेस औसतन 60MB से 80MB रैम लेती है)।ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf ("%d MB ", sum/NR/1024) }' - अब देखें कि आपके सर्वर पर PHP के लिए कितनी फ्री रैम उपलब्ध है (उदा. 4GB रैम सर्वर पर OS और MySQL छोड़कर लगभग 2.5GB = 2560MB रैम PHP के लिए बचती है)।
- कैलकुलेशन:
2560 MB / 70 MB = लगभग 35। - अपनी पूल फाइल (
/etc/php/8.2/fpm/pool.d/www.conf) खोलें और ये वैल्यूज सेट करें:pm = dynamic pm.max_children = 35 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 12 pm.max_requests = 1000 - (यहाँ
pm.max_requests = 1000सेट करने से हर प्रोसेस 1000 अनुरोध पूरे करने के बाद खुद रीसायकल हो जाएगी, जिससे मेमोरी लीक हमेशा के लिए खत्म हो जाती है)।
7. Nginx और Apache एरर लॉग्स की रियल-टाइम जांच (tail -f SOP)
जब साइट 502 या 504 एरर फेंक रही हो, तो सबसे समझदारी भरा कदम यह है कि आप सर्वर के लाइव लॉग्स को अपनी आँखों के सामने बहते हुए देखें:
sudo tail -f /var/log/nginx/error.log
जैसे ही आप अपने ब्राउज़र में साइट को रीफ्रेश करेंगे, टर्मिनल में तुरंत लाल चेतावनी दिखेगी। यदि वहाँ लिखा है "upstream prematurely closed connection while reading response header", तो समझें कि PHP प्रोसेस आउट-ऑफ-मेमोरी होकर क्रैश हो गई है।
8. भारी प्लगइन्स और डेटाबेस डेडलॉक्स को आइसोलेट करना (Query Monitor)
यदि 504 गेटवे टाइमआउट किसी विशिष्ट पेज (जैसे चेकआउट पेज या सर्च रिजल्ट्स) पर बार-बार आ रहा है, तो Query Monitor प्लगइन इंस्टॉल करें:
- यह टूल आपको दिखाता है कि कौन सी MySQL क्वेरी 2 सेकंड से ज्यादा का समय ले रही है (Slow Queries)।
- यदि कोई प्लगइन डेटाबेस की टेबल को 'Lock' कर रहा है, तो MySQL में अन्य सभी विज़िटर्स कतार में फंस जाते हैं और 504 एरर आ जाता है। ऐसे खराब कोड वाले प्लगइन्स को तुरंत हटाएं या उनकी डेटाबेस इंडेक्सिंग ठीक करें।
9. आम गलतियां, बोट स्पाइक्स और सर्वर ओवरलोड से बचाव की SOP
भविष्य में 502 और 504 गेटवे एरर्स से स्थायी सुरक्षा के 3 नियम:
- Cloudflare Bot Management चालू रखें: दुर्भावनापूर्ण स्क्रेपर्स और बॉट्स सर्वर पर एक साथ 500 रिक्वेस्ट्स भेजकर PHP वर्कर्स को जाम कर देते हैं। Cloudflare में 'Bot Fight Mode' को हमेशा ऑन रखें।
- सिस्टम क्रॉन (System Crontab) का उपयोग: वर्डप्रेस के डिफ़ॉल्ट
wp-cron.phpको डिसेबल करें और लिनक्स के सिस्टम क्रॉन से हर 15 मिनट पर बैकग्राउंड जॉब्स चलाएं ताकि विज़िटर्स के पेज लोडिंग पर टाइमआउट का लोड न पड़े। - Redis Object Cache: 60% डेटाबेस क्वेरीज को सर्वर की रैम में कैश करने से MySQL पर लोड खत्म हो जाता है और 504 टाइमआउट कभी नहीं आता।
11. Nginx FastCGI बफर सेटिंग्स ट्यूनिंग (Response Buffer Overflow Fix)
कई बार PHP स्क्रिप्ट बिना किसी एरर के पूरी तरह निष्पादित हो जाती है, लेकिन फिर भी Nginx ब्राउज़र को "502 Bad Gateway" लौटा देता है। ऐसा तब होता है जब PHP स्क्रिप्ट बहुत बड़े हेडर (Headers) या कुकीज भेजती है और Nginx का डिफ़ॉल्ट बफर साइज उसे संभालने के लिए छोटा पड़ जाता है। Nginx एरर लॉग में यह लाइन दिखाई देती है:
upstream sent too big header while reading response header from upstream
इस अदृश्य 502 एरर को ठीक करने के लिए अपनी Nginx साइट कन्फिगरेशन फाइल (/etc/nginx/sites-available/yoursite.conf) में location ~ \.php$ ब्लॉक के अंदर निम्न तीन बफर डायरेक्टिव्स जोड़ें:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
# 502 बफर ओवरफ्लो रोकने के लिए बफर साइज बढ़ाएं
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
# टाइमआउट 300 सेकंड पर सेट करें
fastcgi_read_timeout 300;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
}
कन्फिगरेशन सुरक्षित करने के बाद सिंटैक्स जांचें: sudo nginx -t और रीलोड करें: sudo systemctl reload nginx।
12. Cloudflare Error 520, 521, 522 और 524 का विस्तृत समाधान SOP
यदि आपकी वेबसाइट Cloudflare CDN के पीछे काम कर रही है, तो Cloudflare अपने स्वयं के कस्टम 5xx कोड दिखाता है जो सीधे ओरिजिन सर्वर की स्थिति दर्शाते हैं:
- Cloudflare Error 521 (Web Server is Down): इसका सीधा अर्थ है कि आपके होस्टिंग सर्वर का Apache/Nginx वेब सर्वर बंद है या पोर्ट 80/443 पर क्लाउडफ्लेयर के IP एड्रेस को ब्लॉक कर रहा है। अपने सर्वर के फायरवॉल (UFW/IPTables) में Cloudflare के सभी ऑफिशियल IP सबनेट्स को वाइटलिस्ट करें।
- Cloudflare Error 522 (Connection Timed Out): इसका अर्थ है कि क्लाउडफ्लेयर ने आपके सर्वर से TCP 3-वे हैंडशेक शुरू किया लेकिन सर्वर ने 15 सेकंड में कोई SYN-ACK जवाब नहीं दिया। यह सर्वर क्रैश होने या नेटवर्क रूटिंग फेलियर का संकेत है।
- Cloudflare Error 524 (A Timeout Occurred): यह 504 Gateway Timeout का क्लाउडफ्लेयर संस्करण है। जब आपकी वर्डप्रेस स्क्रिप्ट (जैसे बैकअप एक्सपोर्ट या भारी वूकॉमर्स रिपोर्ट) 100 सेकंड से ज्यादा समय लेती है, तो क्लाउडफ्लेयर कनेक्शन काट देता है। क्लाउडफ्लेयर फ्री प्लान पर टाइमआउट 100 सेकंड पर हार्डकोडेड होता है। ऐसी भारी स्क्रिप्ट्स को WP-CLI (कमांड लाइन) से चलाएं या उस सबडोमेन पर क्लाउडफ्लेयर प्रॉक्सी (Orange Cloud) को बाईपास करके Gray Cloud (DNS Only) कर दें।
13. ऑटोमेटेड बैश डायग्नोस्टिक स्क्रिप्ट: 60 सेकंड में सर्वर हेल्थ ऑडिट
जब भी आपकी वेबसाइट पर 502 या 504 एरर आए, तो बिना समय गंवाए अपने लिनक्स VPS टर्मिनल पर यह वन-लाइनर कमांड चलाकर पूरे सिस्टम की स्थिति जांचें:
cat << 'EOF' > /root/check_server_health.sh
#!/bin/bash
echo "=== 1. RAM & SWAP USAGE ==="
free -h
echo -e "
=== 2. CPU LOAD & PROCESS COUNT ==="
uptime
echo -e "
=== 3. PHP-FPM SERVICE STATUS ==="
systemctl status php*-fpm --no-pager | grep "Active:"
echo -e "
=== 4. TOP 5 MEMORY HOGGING PROCESSES ==="
ps aux --sort=-%mem | awk 'NR<=6{print $2, $4, $11}'
echo -e "
=== 5. LAST 10 NGINX ERROR LOGS ==="
tail -n 10 /var/log/nginx/error.log
echo -e "
=== 6. DISK INODES & SPACE ==="
df -h /
df -i /
EOF
chmod +x /root/check_server_health.sh
/root/check_server_health.sh
यह स्क्रिप्ट तुरंत आपको बता देगी कि क्या रैम 100% फुल होने से OOM-Killer ने PHP-FPM को मार दिया था, या डिस्क इनोड्स फुल होने की वजह से सर्वर टेम्प फाइल्स नहीं लिख पा रहा था।
10. People Also Ask (PAA) महत्वपूर्ण प्रश्नोत्तर
Q1. 502 Bad Gateway और 504 Gateway Timeout में क्या मुख्य अंतर है?
502 Bad Gateway का मतलब है कि फ्रंट सर्वर (Nginx) को बैकएंड सर्वर (PHP-FPM) से गलत या अधूरा रिस्पॉन्स मिला (अक्सर बैकएंड क्रैश होने के कारण)। जबकि 504 Gateway Timeout का मतलब है कि बैकएंड सर्वर जिंदा तो है, लेकिन किसी भारी काम में इतना उलझ गया है कि उसने तय समय (60 सेकंड) में कोई उत्तर ही नहीं भेजा।
Q2. क्या 502/504 एरर आने पर यूजर के कंप्यूटर या इंटरनेट में कोई खराबी होती है?
99% मामलों में नहीं! 500-सीरीज के सभी कोड (500, 502, 503, 504) 'Server-Side Errors' होते हैं। इसका मतलब है कि समस्या यूजर के फोन, लैपटॉप या वाई-फाई में नहीं बल्कि वेबसाइट के होस्टिंग सर्वर के अंदर है।
Q3. Cloudflare पर 502 या 504 एरर आने पर सबसे पहले क्या करना चाहिए?
स्क्रीन को ध्यान से देखें। यदि स्क्रीन पर Cloudflare का लोगो बना है और नीचे 'Host Error' लिखा है, तो इसका मतलब है कि Cloudflare सही काम कर रहा है लेकिन आपका मूल होस्टिंग सर्वर बंद है। अपने होस्टिंग पैनल में लॉगिन करके वेब सर्वर (Apache/Nginx) और PHP सर्विस को रीस्टार्ट करें।
Q4. PHP-FPM पूल सेटिंग्स में pm.max_children क्या होता है?
pm.max_children यह तय करता है कि आपका सर्वर एक साथ कितने PHP अनुरोधों (Requests) को प्रोसेस कर सकता है। यदि यह बहुत कम (उदा. 5) पर सेट है और साइट पर 50 विज़िटर्स आ जाएं, तो बाकी 45 विज़िटर्स कतार में खड़े हो जाते हैं और टाइमआउट होकर 504 एरर आ जाता है।
Q5. Nginx में टाइमआउट बढ़ाने से क्या सर्वर स्लो हो जाता है?
टाइमआउट को बहुत ज्यादा (जैसे 10 मिनट) बढ़ाना खतरनाक हो सकता है क्योंकि यदि कोई खराब स्क्रिप्ट हैंग हो जाए, तो वह सर्वर की रैम को 10 मिनट तक ब्लॉक रखेगी। सामान्यतः 300 सेकंड (5 मिनट) का टाइमआउट सबसे संतुलित और सुरक्षित माना जाता है।
Q6. WordPress REST API या WP-Cron की वजह से 504 एरर क्यों आता है?
वर्डप्रेस का डिफ़ॉल्ट WP-Cron हर पेज लोड पर बैकग्राउंड शेड्यूल्ड टास्क चलाता है। जब साइट पर बड़ा डेटाबेस या कई बैकअप टास्क होते हैं, तो यह मुख्य पेज लोडिंग को 60 सेकंड से ज्यादा ब्लॉक कर देता है और 504 एरर आ जाता है। इसे ठीक करने के लिए सिस्टम क्रॉन (Crontab) चालू करें।
Q7. क्या CDN कैशे क्लियर करने से 502 एरर ठीक हो सकता है?
यदि समस्या कुछ देर पहले सर्वर पर थी और आपने उसे ठीक कर लिया है, लेकिन Cloudflare ने उस 502 एरर पेज को अपने एज कैशे में सेव कर लिया है, तो Cloudflare डैशबोर्ड में 'Purge Everything' करने से तुरंत असली वेबसाइट दिखने लगती है।