अपाचे: हजारों स्थायी रीडायरेक्ट को संभालने का सबसे अच्छा तरीका क्या है?


20

हमारे पास 3000 301 रीडायरेक्ट की सूची है। हमें सहायता की आवश्यकता है

  1. इन्हें लगाने के लिए सबसे अच्छी जगह कौन सी होगी? ऐसा लगता है कि httpd.conf में इन 3000 लाइनों को vhost के अंदर डाला जाएगा।
  2. हजारों यूआरएल को संभालने के लिए अनुशंसित तरीके क्या हैं?
  3. यह पेज लोडिंग गति और अपाचे सर्वर लोड को प्रभावित करने के लिए कितना चल रहा है?

धन्यवाद।

जवाबों:


29

आप किसी अन्य फ़ाइल में रीडायरेक्ट को बनाए रखने में सक्षम होने के लिए Includeनिर्देश का उपयोग कर सकते हैं httpd.conf। लेकिन यह बहुत कुशल नहीं होगा, क्योंकि प्रत्येक अनुरोध को बहुत सारे नियमित अभिव्यक्तियों के खिलाफ जांचने की आवश्यकता होगी। इसके अलावा फ़ाइल में हर बदलाव के बाद सर्वर रीस्टार्ट की आवश्यकता होगी।

इतने सारे रीडायरेक्ट के लिए एक बेहतर तरीका यह होगा कि आप यूआरआरआईdbm से रिडायरेक्ट्स में मैप घोषित करने के लिए रीयरट्रिप के निर्देश का उपयोग करें । इस तरह यह कुशल होगा, क्योंकि dbm लुकअप बहुत तेज होते हैं, और मैप में बदलाव के बाद आपको सर्वर को रिस्टार्ट करने की जरूरत नहीं होगी, जैसा httpdकि मैप फाइल मॉडिफिकेशन टाइम के लिए चेक करता है।

एक पुनर्लेखन नियम इस तरह दिखेगा (मेरे फेडोरा 16 कंप्यूटर पर परीक्षण):

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

और डीबीएम मैप /etc/httpd/conf/redirects.txtइस तरह दिखने वाले टेक्स्ट मैप से बनाया जाएगा :

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

एक कमांड का उपयोग करना

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

जवाब के लिए धन्यवाद। मैंने इसे आज़माया लेकिन त्रुटियां हो रही हैं: मेरी एक पंक्ति redirects.txt फ़ाइल सामग्री (स्थान अलग-अलग मूल्य) mydomain.com/experiment mydomain.com/new_page यह मुझे लाइन पर पार्स त्रुटि दे रहा है 'ReriteCond $ {redirects: $ 1}! = "" "" "! । /Usr/local/apache/conf/httpd.conf की लाइन 314 पर सिंटैक्स त्रुटि: रिवेरिटकॉन्ड: खराब ध्वज delimiters मैंने टिप्पणी की कि बाहर और फिर अपाचे शुरू हुआ, लेकिन mydomain -experiment (या mydomain से कोई अन्य यूआरएल) पर जाकर मुझे त्रुटि दी। "अनुरोध को एक तरह से पुनर्निर्देशित किया जा रहा है जिसे पूरा नहीं किया जा सका"।
ucker

अपाचे स्निपेट के साथ फिर से शुरू नहीं हो रहा है। क्या आप मदद कर सकतें है? मैं किसी भी लॉग फ़ाइल में इससे संबंधित कोई त्रुटि नहीं देख पा रहा हूं।
ucker

मैंने कहा कि यह अप्रमाणित था - मुझे उम्मीद थी कि इसे कुछ ट्विकिंग की आवश्यकता होगी। मुझे लगा कि यह पर्याप्त होगा, क्षमा करें। Httpd की शुरुआत नहीं हुई क्योंकि बीच में जगह नहीं हो सकती है !=और ""- मैंने अपने उदाहरण को एक कामकाजी और परीक्षित संस्करण में अब ठीक कर लिया है।
Tometzky

एक और टिप्पणी: यदि आपके रीडायरेक्ट को क्वेरी स्ट्रिंग ( ?URL के बाद सब कुछ ) पर निर्भर होने की आवश्यकता है, तो आपको एक अलग दृष्टिकोण का उपयोग करने की आवश्यकता होगी , लेकिन यह भी संभव है । जैसा कि अब है, यह सिर्फ क्वेरी स्ट्रिंग को पुनर्निर्देशित करेगा, उदाहरण के http://yourserver.com/foo?q=barलिए पुनर्निर्देशित करेगा http://serverfault.com/?q=bar
Tometzky

अद्यतन के लिए धन्यवाद। RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.dbत्रुटि दी RewriteMap dbm type db is invalid। लेकिन जब मैंने इसका इस्तेमाल किया RewriteMap redirects txt:/etc/httpd/conf/redirects.txtतो काम किया। मैं अभी भी हैशेड तरीके से जाना चाहता हूं जैसे कि आपने सादे पाठ के बजाय समझाया। लेकिन मुझे dbm त्रुटि के बारे में ज्यादा जानकारी नहीं मिली। आपकी सहायता के लिए धन्यवाद।
ucker

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.