2009-06-21 18 views
43

Nginx + PHP (fastCGI पर) मेरे लिए बहुत अच्छा काम करता है। जब मैं एक PHP फ़ाइल का पथ दर्ज करता हूं जो मौजूद नहीं है, तो डिफ़ॉल्ट 404 त्रुटि पृष्ठ (जो कि किसी भी अवैध .html फ़ाइल के लिए आता है) प्राप्त करने के बजाय, मुझे बस "कोई इनपुट फ़ाइल निर्दिष्ट नहीं है"।Nginx - 404 पेज

मैं इस 404 त्रुटि पृष्ठ को कैसे अनुकूलित कर सकता हूं?

उत्तर

33

आप nginx config में त्रुटि_पृष्ठ संपत्ति का उपयोग करते हैं।

उदाहरण के लिए, यदि आप /404.html को 404 त्रुटि पृष्ठ सेट करने के लिए, का उपयोग

error_page 404 /404.html; 

/500.html को त्रुटि 500 ​​पेज की स्थापना का इरादा बस के रूप में आसान है के रूप में:

error_page 500 /500.html; 
+2

हालांकि लिंक ठीक है और जवाब न्यूनतम लिंक के बिना काम करता है, यह अतिरिक्त विस्तार से फायदा हो सकता है। – Paul

+0

@ पॉल I 100% इस पर आपसे सहमत हैं, इसलिए मैंने इस उत्तर में कुछ कोड उदाहरण जोड़े ;-) –

101

आप कर सकते हैं सेटअप आपके nginx.conf में प्रत्येक स्थान ब्लॉक के लिए एक कस्टम त्रुटि पृष्ठ, या संपूर्ण रूप से साइट के लिए वैश्विक त्रुटि पृष्ठ।

location /my_blog { 
    error_page 404 /blog_article_not_found.html; 
} 

एक साइट विस्तृत 404 पेज:

server { 
    listen 80; 
    error_page 404 /website_page_not_found.html; 
    ... 

आप मानक त्रुटि कोड को एक साथ जोड़ सकते हैं एक ही पृष्ठ के लिए

एक विशिष्ट स्थान के लिए एक सरल 404 नहीं मिला पृष्ठ पर रीडायरेक्ट करने के लिए कई प्रकार की त्रुटियों के लिए:

location /my_blog { 
    error_page 500 502 503 504 /server_error.html 
} 

एक पूरी तरह से अलग सर्वर पर पुनर्निर्देशित करने के लिए, assumin

upstream server2 { 
    server 10.0.0.1:80; 
} 
server { 
    location /my_blog { 
     error_page 404 @try_server2; 
    } 
    location @try_server2 { 
     proxy_pass http://server2; 
    } 

manual आपको और अधिक जानकारी दे सकते हैं, या आप Google खोज शब्दों के लिए nginx.conf और वेब पर वास्तविक जीवन उदाहरण के लिए error_page कर सकते हैं: जी आप को अपस्ट्रीम सर्वर नामित server2 अपने http अनुभाग में परिभाषित किया था।

+1

क्या आपको पता है कि एक त्रुटि वाइल्डकार्ड का उपयोग करना संभव है? कुछ 'error_page 50 * = /error_50x.html;' की तरह कुछ? –

+0

वाइल्डकार्ड की अनुमति नहीं है - इस सर्वर कमांड के लिए विकी पेज यहां है http://wiki.nginx.org/NginxHttpCoreModule#error_page - यह भी आवश्यक नहीं है क्योंकि त्रुटि कोड HTTP प्रोटोकॉल द्वारा परिभाषित किया गया है जो नहीं बदलेगा अक्सर। पूरी सूची के लिए http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html या http://en.wikipedia.org/wiki/List_of_HTTP_status_codes देखें और मुझे लगता है कि यदि आप वहां सोचते हैं तो आपको जो भी नंबर पसंद है उसे जोड़ें भविष्य के कोड की आवश्यकता होगी। –

+1

धन्यवाद। वर्तमान में मेरे पास 3 नियम हैं: '/ 403.html','/404.html' और '/ 5xx.html', वे सभी एक ही 'रूट' साझा करते हैं लेकिन किसी भी तरह से यदि मैं स्थान निर्दिष्ट करता हूं '~/(?: 40 [ 34] | 5xx) [।] एचटीएमएल $ 'यह डिफ़ॉल्ट nginx त्रुटि पृष्ठों को प्रस्तुत करेगा, हालांकि, अगर मैं एक गैर-रेगेक्स स्थान का उपयोग करता हूं तो यह काम करता है। क्या आपको कोई विचार है कि ऐसा क्यों होता है? –

27

"error_page" पैरामीटर पर्याप्त नहीं है।

सबसे आसान समाधान

server{ 
    root /var/www/html; 
    location ~ \.php { 
     if (!-f $document_root/$fastcgi_script_name){ 
      return 404; 
     } 
     fastcgi_pass 127.0.0.1:9000; 
     include fastcgi_params.default; 
     fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 
    } 

वैसे है, तो आप Nginx 404 PHP स्क्रिप्ट द्वारा लौटाए स्थिति पर कार्रवाई करना चाहते हैं, आप पर

fastcgi_intercept_errors जोड़ने की जरूरत है;

उदा।

location ~ \.php { 
     #... 
     error_page 404 404.html; 
     fastcgi_intercept_errors on; 
    } 
+0

इस @Grigori को पोस्ट करने के लिए आपको बहुत बहुत धन्यवाद, मैंने अपनी nginx समस्या को ठीक करने के लिए उपरोक्त कोड का उपयोग किया –

+0

कोई PHP फ़ाइलों के बारे में क्या?? –

+1

परफेक्ट, 'fastcgi_intercept_errors' बिल्कुल वही है जो मैं ढूंढ रहा था। – wildpeaks

14

ये जवाब नहीं रह सिफारिश कर रहे हैं के बाद से try_files इस संदर्भ में if तुलना में तेजी से काम करता है। सीधे शब्दों में यदि फ़ाइल मौजूद है परीक्षण करने के लिए अपने php स्थान ब्लॉक में try_files जोड़ने के लिए, अन्यथा वापसी एक 404.

location ~ \.php { 
    try_files $uri =404; 
    ... 
} 
28

वाक्य रचना के साथ सावधान रहें!ग्रेट कछुए उन्हें interchangeably उपयोग किया जाता है, लेकिन:

error_page 404 = /404.html;

200 की एक स्थिति कोड के साथ 404.html पेज लौट जाएगा (क्योंकि = इस पेज को रिले की जाती है कि)

error_page 404 /404.html;

विल 404.html पृष्ठ को एक (मूल) 404 त्रुटि कोड के साथ वापस करें।

https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

+1

यह एक महत्वपूर्ण जानकारी है! –

+1

और 2 साल बाद मैंने अपना कोड सही कर दिया है। धन्यवाद dhr_p। :) –

संबंधित मुद्दे