2011-08-10 15 views
7

मैं अपने चयन के एल्गोरिदम का उपयोग करके एटाग हेडर भेजने के लिए अपाचे या nginx सर्वर को कैसे कॉन्फ़िगर कर सकता हूं (यानी इनोड, माटा या आकार शामिल नहीं है)? क्या कोई नया सी मॉड्यूल संकलित करने का कोई विकल्प है?कस्टम ईटैग पीढ़ी

+0

आप एक का उपयोग मामला है जब आप के लिए खुद 'ETag' सेट करने की आवश्यकता है स्थिर फाइलें? –

+0

क्लस्टर से निर्मित - इनोड और माटा एक ही संस्करण के लिए समान नहीं होंगे, आकार विभिन्न संस्करणों के लिए समान हो सकता है – OrangeDog

+0

Nginx ने पर्ल में अंतर्निहित किया है, यह इसके लिए एक अच्छा काम प्रतीत होता है। यह स्थितियों में बहुत अच्छी तरह से (विश्वसनीय और तेज़) काम करता है जब आपके पास दूरस्थ संसाधन (उदा। डेटाबेस) पर कोई ताला नहीं है। –

उत्तर

4

अपाचे में, ETags are handled as a core feature। इटाग को कई मूल्यों के हैश के रूप में गणना की जाती है। आप सशर्त व्यवहार जिसके लिए हैश में शामिल करने के लिए मान निर्धारित करने के लिए अपने httpd.conf या .htaccess फ़ाइल में FileETag निर्देश उपयोग कर सकते हैं, लेकिन जैसा कि आप ने कहा, अपने विकल्पों के लिए सीमित हैं:

  • INode - आपकी फ़ाइल के आई-नोड बाइट्स
  • में अपनी फ़ाइल
  • All के आकार - - सर्वर अपनी फ़ाइल से
  • Size परोसा जाता है की टाइमस्टैम्प (मिली सेकंड में) - विशेष रूप से सर्वर से
  • MTime ही दिखाया जाता है पर नंबर एक ऊपर
  • None की ll - ऊपर

से कोई भी आप चाहते हैं सही मायने में कस्टम ETag पीढ़ी, आप निश्चित रूप से एक अपाचे मॉड्यूल लेखन को सबसे अच्छा होगा। हालांकि यदि आपको त्वरित और गंदे फ़िक्स की आवश्यकता है, तो आप अपने अनुरोधों को PHP स्क्रिप्ट पर रूट करके और स्क्रिप्ट में Etag शीर्षलेख जोड़कर अपने स्वयं के टैग जेनरेट कर सकते हैं। मार्ग अपने httpd.conf या .htaccess फ़ाइल में इस प्रकार दिखाई देंगे:

RewriteCond %{REQUEST_FILENAME} \.png$  # This example looks for .png requests 
RewriteRule ^(.*)$ /gentag.php?path=$1 [B] # ...and routes them to a PHP script 

PHP स्क्रिप्ट इस प्रकार दिखाई देंगे:

<? 
    $path = $_GET['path']; // Grab the filepath from GET params 
    $cont = file_get_contents($path); // Get file contents to hash 
    $hash = crc32($cont); // Create your own ETag hash however you like 
    header("Etag: $hash"); // Send the custom Etag header 
    echo $cont;    // Dump the file contents to output 
?> 
संबंधित मुद्दे