आंतरिक त्रुटि 500 ​​अपाचे, लेकिन लॉग में कुछ भी नहीं?


122

जब मैं अपने ऐप में एक विशिष्ट पते पर HTTP POST करने की कोशिश करता हूं तो मुझे 500 आंतरिक सर्वर त्रुटियां मिल रही हैं। मैंने वर्चुअल होस्ट्स फ़ाइल में निर्दिष्ट कस्टम लॉग डायरेक्टरी में सर्वर लॉग में देखा है, लेकिन त्रुटि दिखाई नहीं देती है इसलिए यह डीबगिंग में गधे में दर्द हो रहा है।

मैं अपाचे को त्रुटि लॉग में आंतरिक 500 त्रुटियों को लॉग करने का कारण कैसे बनाऊं?


1
आभासी मेजबान के साथ PHP का उपयोग करके मेरे पास एक ही मुद्दा था .... कोई त्रुटि नहीं (Apache2, Ubuntu)। लापता PHP मॉड्यूल (mysql, json, आदि) समाप्त हो रहा है

1
हमारे बारे में, यह उन्हें एक्सेस लॉग में भेज रहा था (शायद इसलिए कि अपाचे के दृष्टिकोण से, यह सही ढंग से काम कर रहा था और उन्हें केवल एक गहरी परत से - हमारे मामले में, पैसेंजर / रेल्स में पारित कर रहा था)। बस इस नोट को यहाँ डाल देने से कोई अपना सिर खुजला रहा है।
टॉम हंड्ट

जवाबों:


-4

कृपया ध्यान दें: मूल पोस्टर विशेष रूप से PHP के बारे में नहीं पूछ रहा था। सभी php केंद्रित उत्तर बड़ी मान्यताओं को वास्तविक प्रश्न के लिए प्रासंगिक नहीं बनाते हैं।

स्क्रिप्ट त्रुटि लॉग के विपरीत डिफ़ॉल्ट त्रुटि लॉग आमतौर पर (अधिक) विशिष्ट त्रुटि होती है। अक्सर इसे अस्वीकार कर दिया जाएगा या यहां तक ​​कि एक दुभाषिया भी नहीं मिल सकता है।

इसका मतलब यह है कि गलती लगभग हमेशा आपकी स्क्रिप्ट के साथ होती है। उदाहरण के लिए आपने एक पर्ल स्क्रिप्ट अपलोड की है, लेकिन क्या उसने इसे निष्पादित करने की अनुमति नहीं दी है? या शायद यह एक Linux वातावरण में दूषित हो गया था यदि आप विंडोज़ में स्क्रिप्ट लिखते हैं और फिर इसे सर्वर पर अपलोड करते हैं बिना लाइन के अंत में कनवर्ट किए जा रहे हैं तो आपको यह त्रुटि मिलेगी।

यदि आप भूल जाते हैं तो पर्ल में

print "content-type: text/html\r\n\r\n";

आपको यह त्रुटि मिलेगी

इसके कई कारण हैं। इसलिए कृपया पहले अपनी त्रुटि लॉग की जांच करें और फिर कुछ और जानकारी प्रदान करें।

डिफ़ॉल्ट त्रुटि लॉग अक्सर /var/log/httpd/error_logया में होता है /var/log/apache2/error.log

डिफ़ॉल्ट त्रुटि लॉग को देखने का कारण (जैसा कि ऊपर बताया गया है) है, क्योंकि त्रुटियों को हमेशा वर्चुअल होस्ट में परिभाषित कस्टम त्रुटि लॉग में पोस्ट नहीं किया जाता है।

लिनक्स मानता है और जरूरी नहीं कि पर्ल


6
मैंने सर्वर ErrorLog की जाँच की, और वहाँ कुछ भी नहीं मिला है।
वूलबर्ट

1
आप सही हैं, यह php स्क्रिप्ट के साथ एक समस्या है। PEAR लाइब्रेरी स्थापित नहीं की गई थी। मैंने इसे अपने VPS पर स्थापित किया है और सब ठीक है। सबको शुक्रीया!
वॉल्बर्ट

261
"कृपया लॉग की जांच कैसे करें" "मेरे लॉग खाली क्यों हैं" का स्वीकृत उत्तर हो सकता है?
अल्वारो गोंजालेज

4
मैंने उपयोगकर्ता को डिफ़ॉल्ट त्रुटि लॉग में इंगित किया न कि कस्टम त्रुटि लॉग में। अक्सर जब कोई स्क्रिप्ट किसी कारण से विफल हो जाती है तो त्रुटि डिफ़ॉल्ट त्रुटि लॉग में रूट हो जाती है
DeveloperChris

1
PHP के साथ, मुझे कॉन्फ़िगर अपाचे त्रुटि लॉग में कुछ भी नहीं था, लेकिन त्रुटियों के साथ मिला grep PHP /var/log/syslog। शायद इसलिए क्योंकि मैं था error_log = syslogमें /etc/php5/apache2/php.ini
mivk

145

500 आंतरिक सर्वर त्रुटियाँ आपके अपाचे त्रुटि लॉग में लॉग इन क्यों नहीं की जा रही हैं?

त्रुटियाँ जो आपके 500 आंतरिक सर्वर त्रुटि का कारण हैं वे एक PHP मॉड्यूल से आ रही हैं। डिफ़ॉल्ट रूप से, PHP इन त्रुटियों को लॉग नहीं करता है। कारण यह है कि आप चाहते हैं कि वेब अनुरोध भौतिक रूप से तेज़ी से आगे बढ़ें और त्रुटियों को स्क्रीन पर लॉग करने के लिए एक सुरक्षा खतरा है जहां हमलावर उन्हें देख सकते हैं।

ये निर्देश आंतरिक सर्वर त्रुटि लॉगिंग के लिए कर रहे हैं सक्षम करने के लिए Ubuntu 12.10के साथ PHP 5.3.10और Apache/2.2.22

सुनिश्चित करें कि PHP लॉगिंग चालू है:

  1. अपनी php.ini फ़ाइल का पता लगाएँ:

    el@apollo:~$ locate php.ini
    /etc/php5/apache2/php.ini
    
  2. उस फ़ाइल को रूट के रूप में संपादित करें:

    sudo vi /etc/php5/apache2/php.ini
    
  3. इस लाइन को php.ini में खोजें:

    display_errors = Off
    
  4. उपरोक्त पंक्ति को इसमें बदलें:

    display_errors = On
    
  5. फ़ाइल में नीचे आप इसे देखेंगे:

    ;display_startup_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    ;error_reporting
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    
  6. अर्धविराम टिप्पणियाँ हैं, इसका मतलब है कि लाइनें प्रभावी नहीं होती हैं। उन लाइनों को बदलें ताकि वे इस तरह दिखें:

    display_startup_errors = On
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    error_reporting = E_ALL
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    

    यह PHP से जो संवाद करता है वह यह है कि हम इन सभी त्रुटियों को लॉग इन करना चाहते हैं। चेतावनी, एक बड़ा प्रदर्शन हिट होगा, इसलिए आप इसे उत्पादन पर सक्षम नहीं बनाना चाहते क्योंकि लॉगिंग में काम लगता है और काम में समय लगता है, समय खर्च होता है।

  7. PHP और Apache को फिर से शुरू करके परिवर्तन को लागू करना चाहिए।

  8. 500 आंतरिक सर्वर त्रुटि के कारण फिर से क्या करें, और लॉग की जांच करें:

    tail -f /var/log/apache2/error.log
    
  9. आपको 500 त्रुटि अंत में दिखनी चाहिए, कुछ इस तरह से:

    [Wed Dec 11 01:00:40 2013] [error] [client 192.168.11.11] PHP Fatal error:  
    Call to undefined function Foobar\\byob\\penguin\\alert() in /yourproject/
    your_src/symfony/Controller/MessedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup
    

46
display_errorsस्क्रीन पर त्रुटि प्रिंट करता है । लॉग फ़ाइलlog_errors में त्रुटियाँ लिखते हैं ।
daVe

11
यह इस प्रश्न का विहित उत्तर होना चाहिए।
डेविड

9
@WanLiqun यह जानकारी का एक बहुत अच्छा टुकड़ा है, लेकिन यह केवल PHP पर लागू होता है, जिसका प्रश्न में उल्लेख भी नहीं किया गया है।
अल्वारो गोंजालेज

1
"जो त्रुटियाँ आपके 500 आंतरिक सर्वर त्रुटि का कारण बनती हैं वे एक PHP मॉड्यूल से आ रही हैं। डिफ़ॉल्ट रूप से, PHP इन त्रुटियों को लॉग नहीं करता है।" PHP का उल्लेख किसने किया? सर्वर 500 PHP में अक्षम होना लॉगिंग एक धारणा है और सबसे अधिक बार एक गलत धारणा है। अपाचे एक फॉल्टिंग मॉड्यूल (इस मामले में php) से सर्वर 500 त्रुटियों को लॉग करेगा लेकिन सबसे अधिक बार यह /var/log/apache2/error.log (डेबियन या इसी तरह का मानकर) पर जाएगा
DeveloperChris

4
यह उत्तर स्क्रीन पर त्रुटियों को डंप करने के लिए एक बुरी सलाह के साथ शुरू होता है।
luqo33

11

अपने php एरर लॉग की जाँच करें जो आपके अपाचे एरर लॉग से अलग फाइल हो सकती है।

जाकर इसे देखें phpinfo()और error_log विशेषता के लिए जाँच करें। अगर यह सेट नहीं है। इसे सेट करें: https://stackoverflow.com/a/12835262/445131

हो सकता है कि आप जो पोस्ट करने की कोशिश कर रहे हैं, या किसी अन्य अधिकतम मेमोरी सेटिंग्स में से एक बहुत कम हो, उसके लिए आपका पोस्ट_मैक्स_साइज़ बहुत छोटा है।


1
प्रश्न था, "मैं अपाचे को त्रुटि लॉग में आंतरिक 500 त्रुटियों को लॉग करने का कारण कैसे बनाऊं?" यह शायद एक टिप्पणी होनी चाहिए।
jww

11

मैं बस इसमें भाग गया और यह मेरे .htaccess फ़ाइल में mod_authnz_ldap ग़लतफ़हमी के कारण था। बिल्कुल कुछ भी लॉग नहीं किया जा रहा था, लेकिन मुझे 500 त्रुटि मिलती रही।

यदि आप इस विशेष समस्या में भाग लेते हैं, तो आप mod_authnz_ldap के लॉग स्तर को इस तरह बदल सकते हैं:

LogLevel warn authnz_ldap_module:debug

यह mod_authnz_ldap के लिए डीबग के लॉग स्तर का उपयोग करेगा लेकिन बाकी सब के लिए चेतावनी देगा ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel )।


1
प्रश्न था, "मैं अपाचे को त्रुटि लॉग में आंतरिक 500 त्रुटियों को लॉग करने का कारण कैसे बनाऊं?" यह शायद एक टिप्पणी होनी चाहिए।
jww

अच्छा अवलोकन। मैंने उन त्रुटियों को लॉग करने के लिए निर्देश जोड़े हैं।
बेमपिन

7

यदि आपकी आंतरिक सर्वर त्रुटि जानकारी लॉग फ़ाइलों में दिखाई नहीं देती है, तो आपको संभवतः अपाचे सेवा को पुनरारंभ करने की आवश्यकता है ।

मैंने पाया है कि अपाचे 2.4 (कम से कम विंडोज प्लेटफॉर्म पर) लॉग फाइल को फ्लश करने से इंकार करता है - इसके बजाय, लॉग डेटा काफी समय तक मेमोरी में रहता है। यह प्रदर्शन के दृष्टिकोण से एक अच्छा विचार है, लेकिन इसे विकसित करते समय भ्रमित किया जा सकता है।


लिनक्स पर मेरे लिए यह सही उत्तर था। मूल error.log को हटाने के बाद भी (जो कि एक कैरेक्टर डिवाइस फाइल थी) और इसे 777 error.log के साथ बदलने के बाद, Apache फिर से शुरू होने तक नहीं लिखेगा।
एडेलमार

2

@ Eric-leschinski द्वारा उत्तर सही है।

लेकिन एक और मामला है यदि आपका सर्वर एपीआई FPM / FastCGI है (Centos 8 पर डिफ़ॉल्ट या आप phpinfo () फ़ंक्शन का उपयोग कर सकते हैं)

इस मामले में:

  1. phpinfo()एक php फ़ाइल में चलाएँ ;
  2. Loaded Configuration Fileअपने PHP के लिए कॉन्फ़िगर फ़ाइल कहाँ है, यह देखने के लिए परम की तलाश में है ।
  3. @ Eric-leschinski के उत्तर जैसी कॉन्फ़िगर फ़ाइल संपादित करें।
  4. Server APIपरम की जाँच करें । यदि आपका सर्वर केवल अपाचे हैंडल एपीआई का उपयोग करता है -> अपाचे को पुनरारंभ करें। यदि आपका सर्वर php-fpm का उपयोग करता है तो आपको php-fpm सेवा को पुनः आरंभ करना होगा

    systemctl php-fpm को पुनः आरंभ करें

    लॉग फ़ाइल को php-fpm लॉग फ़ोल्डर में देखें। जैसे/var/log/php-fpm/www-error.log


1

मेरे मामले में यह httpd.conf में ErrorLog निर्देश था। बस आकस्मिक रूप से मैंने पहले ही हार मान ली थी। खोज को साझा करने का निर्णय लिया गया) अब मुझे पता है कि 500-त्रुटियों को कहां खोजना है।


क्या आप कृपया अपने उत्तर में और अधिक विवरण डाल सकते हैं
याह्या हुसैन

मैं Apache के लिए Magento (CMS - Content Management System) का उपयोग कर रहा हूँ। Magento के मुख्य वर्गों का उपयोग करते हुए मेरे पृष्ठ पर एक त्रुटि 500 ​​थी। मुझे वह नहीं मिला जहां मैं त्रुटि संदेश देख सकता था। यहाँ कुछ उत्तरों के अनुसार मैंने अपाचे लॉग / etc / httpd / log / error_log में खोजने की कोशिश की। लेकिन वहां कुछ भी नहीं था। बाद में मुझे पता चला कि लॉग पथ को परिभाषित करते हुए, उस विशिष्ट वेब होस्ट के लिए मेरे httpd.conf में एक लाइन है: <virtualstost। ... ErrorLog / usr / www / log / error_log इसलिए मुझे एक अधिक विशिष्ट होस्ट लॉग देखने की आवश्यकता है जो सामान्य एपाचे लॉग नहीं है।
यूजीन लाइकेनोक

1

HttpProtocolOptions Unsafeअपनी Apache config फ़ाइल में जोड़ें और Apache सर्वर को पुनरारंभ करें। यह त्रुटि विवरण दिखाता है।


0

जांचें कि आप जिस php का संस्करण चला रहे हैं, वह आपके कोडबेस से मेल खाता है। उदाहरण के लिए, आपका स्थानीय वातावरण php 5.4 (और चीजें ठीक-ठाक चलता है) चल सकता है और शायद आप अपने कोड का परीक्षण किसी नई मशीन पर कर रहे हैं जिसमें php 5.3 स्थापित है। यदि आप 5.4 सिंटैक्स का उपयोग कर रहे हैं जैसे कि [] सरणी के लिए () तो आप ऊपर वर्णित स्थिति प्राप्त करेंगे।


प्रश्न था, "मैं अपाचे को त्रुटि लॉग में आंतरिक 500 त्रुटियों को लॉग करने का कारण कैसे बनाऊं?" यह शायद एक टिप्पणी होनी चाहिए।
jww

0

एक स्थिर फ़ाइल तक पहुँचने का प्रयास करें। यदि यह काम नहीं कर रहा है तो अपनी फ़ाइल की निर्देशिका के लिए रूट "/" या "c: \" से सभी निर्देशिकाओं पर जाएं और जांचें कि क्या उनमें ".htaccess" फाइलें हैं।

मैंने एक बार "c: \" में एक फ़ाइल छोड़ी थी और इसके सबसे अजीब परिणाम थे।


1
प्रश्न था, "मैं अपाचे को त्रुटि लॉग में आंतरिक 500 त्रुटियों को लॉग करने का कारण कैसे बनाऊं?"
jww

0

कृपया जांचें कि क्या आप अपने कोड में कहीं त्रुटि रिपोर्टिंग अक्षम कर रहे हैं।

मेरे कोड में एक जगह थी जहाँ मैंने इसे निष्क्रिय कर दिया था, इसलिए मैंने इसके बाद डिबग कोड जोड़ा:

require_once("inc/req.php");   <-- Error reporting is disabled here

// overwrite it
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.