2012-02-26 5 views
68

मेरे पास nginx चल रहा है जो कई वेबसाइटों परोसता है। पहला सर्वर के आईपी पते पर एक स्टेटस संदेश है। दूसरा admin.domain.com पर एक व्यवस्थापक कंसोल है। ये महान काम करते हैं। अब मैं सभी अन्य डोमेन अनुरोधों को एक index.php पर जाना चाहता हूं - मेरे पास डोमेन और सबडोमेन का भार है और यह उन सभी को nginx कॉन्फ़िगरेशन में सूचीबद्ध करने के लिए अव्यवहारिक है।nginx server_name वाइल्डकार्ड या कैच-सब

अब तक मैंने server_name को * पर सेट करने का प्रयास किया है, लेकिन यह एक अवैध वाइल्डकार्ड के रूप में विफल रहा है। *.* काम करता है जब तक कि मैं अन्य सर्वर ब्लॉक जोड़ता हूं, तो मुझे लगता है कि यह उनके साथ संघर्ष करता है।

वहाँ के बाद अन्य साइटों परिभाषित किया गया है nginx में एक कैच-ऑल सर्वर ब्लॉक चलाने के लिए एक तरीका है?

N.B. मैं स्पैमर नहीं हूं, ये उपयोगी सामग्री वाले वास्तविक साइट हैं, वे सिर्फ एक ही सीएमएस द्वारा डेटाबेस से संचालित हैं!

उत्तर

101

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

listen  80 default_server; 

यदि आप सब कुछ index.php पर धक्का देना चाहते हैं तो फ़ाइल या फ़ोल्डर मौजूद नहीं है;

try_files      $uri /$uri /index.php; 
+0

पूरी तरह से काम किया - बहुत धन्यवाद। मैं आईपी पते पर स्थिति पृष्ठ के लिए 'server_name _;' का उपयोग नहीं कर सका, मुझे 'server_name x.x.x.x' निर्दिष्ट करना था, लेकिन यह ठीक है! – Tak

+0

'जोड़ना default_server' nginx 1.4.6 जो वर्तमान में Ubuntu 14.04 पर नवीनतम संस्करण है पर काम नहीं लगता है ... जब मैं इसे जोड़ने के लिए,' configtest' आदेश एक त्रुटि देता है, और सर्वर को पुन: प्रारंभ काम नहीं करता है या तो। मैंने डेबियन जेस्सी के साथ अपने सर्वर पर सटीक उसी कॉन्फ़िगरेशन की कोशिश की है, जिसमें nginx 1.6.2 है, और यह पूरी तरह से काम करता है। तो एक और संस्करण की कोशिश यदि आप HTTPS के लिए 1.4.6 ... – Nicomak

+0

साइड नोट पर कर रहे हैं: '' 'default_server''' निर्देश भी सर्वर है कि उस पोर्ट पर अनुरोधों के लिए SSL हाथ मिलाना संभाल लेंगे सेट। इसलिए, यदि आप सर्वर ब्लॉक ए को एसएसएल को संभालने के लिए चाहते हैं, लेकिन सर्वर बी को HTTPS के लिए कैचॉल के रूप में कार्य करने के लिए, समाधान सर्वर बी – Luke

19

यह काम करेगा:

server_name ~^(.+)$ 
+6

'सर्वर_नाम ~ पर '' 'server_name ~^(। +) $' '' सेट करना है। लगता है कि यह अधिक कुशल – zhangyoufu

+1

लगता है यह मेरे लिए काम करता है। किसी भी कारण से मैं काम करने के लिए default_server नहीं मिल सका, यह मेरे सभी अन्य vhosts overriding था। – NeuroXc

34

एक साधारण अंडरस्कोर रूप में अच्छी तरह से काम करता है:

server_name _; 

स्रोत: http://nginx.org/en/docs/http/server_names.html

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – Kmeixner

+6

लिंक सिर्फ एक संदर्भ के रूप में प्रदान किया गया है। वास्तव में ऊपर दी गई दो पंक्तियां उत्तर हैं: सर्वर_नाम के लिए एक मान के रूप में अंडरस्कोर डालने से वांछित "सभी को पकड़ें" व्यवहार उत्पन्न होगा। –

+25

यह उत्तर सच नहीं है। संदर्भ यह स्पष्ट करता है कि यह तब तक काम नहीं करेगा जब तक कि आपके कॉन्फ़िगरेशन में '80 डिफ़ॉल्ट_सर्वर' सुनें। – Beetle

3

मुझे किसी भी तरह default_server काम कर रहा था को परिभाषित करने के लिए। मैंने इसे

server_name ~^.*$ 

सभी की नियमित अभिव्यक्ति का उपयोग करके हल किया।

+0

सभी उच्च मतदान विकल्पों का प्रयास किया और यह एकमात्र ऐसा काम है जो काम करता है। नोट: मैं अपने आईपी एड्रेस बनाम यूआरएल के साथ एक सर्वर पर जाने की कोशिश कर रहा हूं। – Mampersat